2011-09-23 21 views
6

मैं एक प्रोजेक्ट शुरू कर रहा हूं और मैंने Django का उपयोग करने का निर्णय लिया है।Django: डेटाबेस डिज़ाइन के लिए सर्वोत्तम अभ्यास

मेरा प्रश्न डेटाबेस के निर्माण के संबंध में है। मैंने ट्यूटोरियल और कुछ किताबें पढ़ी हैं और वे हमेशा मॉडल बनाने शुरू करते हैं, और फिर डेटाबेस को सिंक्रनाइज़ करते हैं। मुझे कहना है, यह मेरे लिए थोड़ा अजीब है। मैंने हमेशा डीबी के साथ शुरुआत की है, स्कीमा को परिभाषित किया है, और उसके बाद मेरे डीबी एब्स्ट्रैक्शन (मॉडल, इकाइयां, आदि) बनाते हैं।

मैंने कुछ बाहरी प्लग-इन करने योग्य ऐप्स की जांच की है और वे "मॉडल पहले" अभ्यास का भी उपयोग करते हैं।

मैं "मॉडल-पहले" दृष्टिकोण के लिए कुछ लाभ देख सकते हैं, पोर्टेबिलिटी, फिर से तैनाती, आदि

लेकिन मैं भी कुछ नुकसान को देखने की तरह: अनुक्रमणिका बनाने के तरीके के सूचकांक की तरह, ट्रिगर विचार, एसपी, आदि

तो, आप वास्तविक जीवन परियोजना कैसे शुरू करते हैं?

+1

मैं अपने डाटाबेस स्कीमा की योजना है, तो यह एक Django मॉडल के माध्यम से लागू वहाँ अन्य sql आदेशों आप उपयोग करने के लिए कर रहे हैं। आप django में या अपने डीबी बैकएंड के माध्यम से इंडेक्स बना सकते हैं। – dm03514

+0

+1 अच्छा "मिश्रण"। – santiagobasulto

उत्तर

11

ट्रिगर, विचार, और संग्रहीत प्रक्रियाएं वास्तव में Django दुनिया का हिस्सा नहीं हैं। इसे इस्तेमाल करने के लिए बनाया जा सकता है, लेकिन यह दर्दनाक और अनावश्यक है। Django के डेवलपर्स इस विचार को देखते हैं कि व्यवसाय तर्क Python में है, न कि आपके डेटाबेस में।

अनुक्रमित का सवाल है, तो आप उन्हें साथ अपने मॉडल के साथ (चीजों के साथ db_index और unique_together की तरह बना सकते हैं, या आप दक्षिण की तरह कुछ का उपयोग कर डेटाबेस माइग्रेशन के माध्यम से बाद में उन्हें जोड़ सकते हैं।

+0

+1 अच्छा जवाब। धन्यवाद। अब, मैं पूछता हूं: क्या आपने कभी ट्रिगर्स, एसपी या विचारों का उपयोग नहीं किया है? असली दुनिया क्षुधा उन चीजों के बिना मौजूद हो सकता है? कृपया मुझे गलत मत समझो, मैं पाइथन + Django दुनिया में नया हूँ। मैं बिग आर्किटेक्चर जावा ऐप से आया हूं, और हम उन डीबी सामानों पर भरोसा करते हैं। दक्षिण के उपयोग के लिए – santiagobasulto

+1

+1। आप अपनी अनुक्रमणिका का प्रबंधन कर सकते हैं और जैसे माइग्रेशन का उपयोग करना, जीवन को अधिक आसान बनाना। –

+0

ओरेकल डेवलपर्स जोर देते हैं कि डेटाबेस डिज़ाइन का एक निर्विवाद सिद्धांत प्राथमिक कुंजी अपरिवर्तनीय होना चाहिए। उनके पास वास्तव में उस दावे के लिए एक अच्छा सैद्धांतिक कारण नहीं है। ऐसा होता है कि ओरेकल 'अद्यतन कैस्केड' पर समर्थन नहीं करता है। मुझे लगता है कि अगर डैंजो ने ट्रिगर, विचार, संग्रहित प्रक्रियाओं, जांच बाधाओं और शुरुआत से स्थगित बाधाओं का समर्थन किया था तो आपकी राय अलग होगी। –

7

अधिकतर हम एसक्यूएल नहीं लिखते (उदाहरण के लिए हमारे मॉडल के लिए इंडेक्स बनाएं, टेबल बनाएं, आदि ...) और इसके बजाय इसे हमारे लिए उत्पन्न करने के लिए Django पर भरोसा करें।

मॉडल परत से अपने ऐप को डिज़ाइन करने के साथ शुरुआत करना बिल्कुल ठीक है, क्योंकि आप भरोसा कर सकते हैं Django पर आपके लिए आवश्यक सही डेटाबेस एसक्यूएल उत्पन्न करने के लिए।

कैसे

  • से चलाता है: Django code or MySQL triggers
  • अनुक्रमित: कभी, जैंगो आप इन डेटाबेस कार्यों को दोहराने के लिए के लिए विभिन्न कार्यों प्रदान करता है unique = True या unique_togther = (('field1', field2'),) समग्र अद्वितीय बाधा के लिए: db_index=True
  • अद्वितीय बाधाओं के साथ निर्दिष्ट किया जा सकता।

एसक्यूएल लिखने के बजाय Django का उपयोग करने का लाभ यह है कि आप अपने द्वारा उपयोग किए जा रहे विशेष डेटाबेस से दूर हैं। दूसरे शब्दों में, आप एक दिन SQLite पर जा सकते हैं और PostgresQL या MySQL पर स्विच कर सकते हैं और परिवर्तन अपेक्षाकृत दर्द रहित होगा।

उदाहरण:

जब आप इस चलाएँ:

python manage.py syncdb 

Django स्वचालित रूप से टेबल, अनुक्रमित बनाता है, चलाता है, आदि, यह मॉडल अपने द्वारा बनाए गए समर्थन की जरूरत है।आप Django आप के लिए अपने डेटाबेस बनाने के साथ सहज नहीं हैं, तो आप हमेशा उपयोग कर सकते हैं:

python manage.py sqlall 

यह बाहर SQL कथन प्रिंट होगा कि Django क्रम में करने के लिए अपने मॉडल ठीक से काम करने के लिए की आवश्यकता होगी।

देखें: https://docs.djangoproject.com/en/1.3/ref/django-admin/#sql-appname-appname

+0

मुझे लगता है कि यह सही है। लेकिन, मैं हमेशा कहता हूं कि डेटाबेस स्विच करना आम बात नहीं है। मेरा मतलब है, हर कोई इसे एक बड़े लाभ की तरह लेता है, लेकिन शायद ही कभी होता है। अच्छा जवाब बीटीडब्ल्यू +1 – santiagobasulto

+0

इसके लिए क्या लायक है (और चूंकि यह धागा 2+ साल पुराना है, ज्यादा नहीं) मैंने हाल ही में दो परियोजनाओं को स्विच किया है जिन्हें मैंने SQLite के रूप में शुरू किया था (इसलिए मैं उन्हें केवल एक सिस्टम पर ले जा सकता था) प्रदर्शन/मल्टीप्रोसेस कारणों के लिए पोस्टग्रेस का उपयोग करने के लिए। – Foon

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