2010-10-26 18 views
13

मैं समझता हूं कि Django में, ओआरएम MySQL या PostgreSQL में ENUM प्रकार का समर्थन नहीं करता है, क्योंकि यह मूल रूप से एक MySQL एक्सटेंशन था, और अन्य डीबी प्रकारों में पोर्टेबल नहीं था। इसलिए दो विकल्प आपके मॉडल के लिए "विकल्प" तर्क का उपयोग करना चाहते हैं, या एक विदेशी कुंजी संदर्भ का उपयोग करना है।Django मॉडल - विदेशी कुंजी बनाम विकल्प?

इन दृष्टिकोणों के पेशेवरों और विपक्ष क्या हैं?

लिंग की तरह कुछ के लिए, मुझे लगता है कि आप "विकल्प", जैसे प्रयोग करेंगे: राज्य के नाम, क्या के लिए और एक अलग तालिका का उपयोग कर के खिलाफ कारण कर रहे हैं, और विदेशी कुंजी की तरह कुछ के लिए

GENDER_CHOICES = (
    ('M', 'Male'), 
    ('F', 'Female'), 
) 
... 
gender = models.CharField(max_length=1, choices=GENDER_CHOICES) 

हालांकि, उस टेबल पर?

state = models.ForeignKey(AustralianState) 

आप किस परिस्थिति में एक बनाम दूसरे का उपयोग करेंगे?

चीयर्स, विक्टर

उत्तर

3

संभावित विकल्पों की संख्या बड़ी होने पर आपको विदेशी कुंजी पर भी विचार करना चाहिए। यह देशों या राज्यों के लिए एफके का उपयोग करने पर विचार करने के कारणों में से एक है। अन्यथा, आप अपने स्रोत कोड में बहुत से डेटा को प्रभावी ढंग से हार्ड-कोडिंग कर रहे हैं।

+0

क्या यह प्रदर्शन कारणों से है? हम्म, इसलिए बड़ी संख्या में राज्यों के लिए, मुझे लगता है कि एक एफके लुकअप टेबल जाने का रास्ता है? और फिर आप सिर्फ Django फिक्स्चर में राज्यों की सूची होगी? – victorhooi

+0

यह इतना प्रदर्शन कारण नहीं है - प्रदर्शन संभवतः टुपल्स के साथ बेहतर है जब तक कि आप दो हजार से अधिक विकल्पों को नहीं देख रहे हों - यह ज्यादातर रखरखाव मुद्दा है। असल में Django के पास बहुत सारे देश/राज्य क्षेत्र हैं जो स्थानीय इलाकों में अंतर्निहित हैं, मेरा मानना ​​है। और मुझे लगता है कि आप एक स्टेटफिल्ड बना सकते हैं जिसे आपने अन्य फाइलों में आयात किया था। पूर्ण प्रकटीकरण: मुझे पूरा यकीन है कि मेरे ऐप्स के कुछ हिस्सों में मैं जिस देश और राज्य क्षेत्रों का उपयोग करता हूं, वास्तव में इसके बजाय विकल्पों का उपयोग करता हूं। लेकिन एफके भी एक सभ्य पसंद होगा। –

+0

मैं जोड़ता हूं कि इस मामले में देश और राज्य संक्षेप में विदेशी कुंजी के रूप में वृद्धिशील पूर्णांक की बजाय, बहुत अधिक समझदारी होती है। –

14

मैं विकल्पों जहां विकल्पों समय के साथ बदल नहीं होगा का प्रयोग करेंगे। यदि वे करेंगे, तो एक नए मॉडल के साथ एक एफके बेहतर होगा।

संबंधित मुद्दे