आप डीबी में एनम क्यों स्टोर करेंगे?


69

मैंने कई प्रश्न देखे हैं, जैसे कि DB में enums कैसे स्टोर करें , इस बारे में सलाह लेना। लेकिन मुझे आश्चर्य है कि आप ऐसा क्यों करेंगे। तो चलिए बताते हैं कि मेरे पास Personएक genderफील्ड है, और एक Genderएनम है। फिर, मेरी व्यक्ति तालिका में एक स्तंभ लिंग है।

शुद्धता को लागू करने के स्पष्ट कारण के अलावा, मैं यह नहीं देखता कि मैं genderअपने आवेदन में पहले से मौजूद नक्शे के लिए एक अतिरिक्त तालिका क्यों बनाऊंगा। और मैं वास्तव में उस दोहराव को पसंद नहीं करता।



1
आप कहां से डेटा स्टोर करेंगे जो नियमित रूप से बदल सकते हैं? हालांकि आप सभी विकल्पों के बारे में सोच सकते हैं कि क्या होगा अगर कोई साथ आता है और एक नया विकल्प जोड़ना चाहता है। क्या आप उस हार्ड-कोडित सूची को ट्विस्ट करने के लिए तैयार हैं? कोई अपने लिंग को पुरुष या महिला के अलावा किसी और चीज के रूप में देना चाह सकता है, उदाहरण के लिए इंटरसेक्स।
जेबी किंग

4
@JBKing ... जरा फेसबुक की लिंग सूची देखें।


3
यदि आपके ग्राहक "डरे हुए Tumblrites" हैं, तो आप बहुत अच्छी तरह से एक डेटाबेस स्कीमा बना सकते हैं, जो आपको कुछ ऐसी चीजें बनाने देता है, जो कम से कम, यदि आप व्यवसाय में बने रहने का इरादा रखते हैं।
स्टीवन बर्नैप

जवाबों:


74

आइए एक और उदाहरण लेते हैं जो अवधारणाओं और अपेक्षाओं से कमतर है। मुझे यहां एक एनम मिला है, और यह बग के लिए प्राथमिकताओं का सेट है।

डेटाबेस में आप किस मूल्य का भंडारण कर रहे हैं?

तो, मैं भंडारण किया जा सकता है 'C', 'H', 'M', और 'L'डेटाबेस में। या 'HIGH'इत्यादि। इससे कड़े टाइप किए गए डेटा की समस्या है । मान्य मानों का एक ज्ञात सेट है, और यदि आप उस सेट को डेटाबेस में संग्रहीत नहीं कर रहे हैं , तो इसके साथ काम करना मुश्किल हो सकता है।

आप कोड में डेटा क्यों स्टोर कर रहे हैं?

आपको List<String> priorities = {'CRITICAL', 'HIGH', 'MEDIUM', 'LOW'};कोड में उस प्रभाव के लिए कुछ मिला है । इसका मतलब है कि आपको इस डेटा के विभिन्न मानचित्रण उचित प्रारूप में मिल गए हैं (आप डेटाबेस में सभी कैप्स डाल रहे हैं, लेकिन आप इसे प्रदर्शित कर रहे हैं Critical)। आपका कोड अब स्थानीय बनाना भी मुश्किल है। आपने एक स्ट्रिंग को विचार का डेटाबेस प्रतिनिधित्व बाध्य किया है जो कोड में संग्रहीत है।

कहीं भी आपको इस सूची तक पहुंचने की आवश्यकता है, आपको या तो कोड डुप्लीकेशन की आवश्यकता है या स्थिरांक का एक वर्ग है। जिनमें से न तो अच्छे विकल्प हैं। एक को यह भी नहीं भूलना चाहिए कि अन्य एप्लिकेशन हैं जो इस डेटा का उपयोग कर सकते हैं (जो अन्य भाषाओं में लिखा जा सकता है - जावा वेब एप्लिकेशन में क्रिस्टल रिपोर्ट रिपोर्टिंग सिस्टम का उपयोग किया गया है और एक पर्ल बैच नौकरी डेटा इसमें खिलाता है)। रिपोर्टिंग इंजन को डेटा की वैध सूची (क्या होता है अगर 'LOW'प्राथमिकता में कुछ भी चिह्नित नहीं है और आपको यह जानना होगा कि रिपोर्ट के लिए एक वैध प्राथमिकता है?); और बैच की नौकरी के बारे में जानकारी होगी कि क्या मान्य है? मान हैं।

Hypothetically, आप कह सकते हैं "हम एक एकल-भाषा की दुकान हैं - सबकुछ जावा में लिखा है" और एक एकल .jar है जिसमें यह जानकारी है - लेकिन अब इसका मतलब है कि आपके आवेदन एक-दूसरे से कसकर जोड़े हुए हैं। आँकड़े। हर बार परिवर्तन होने पर आपको वेब एप्लिकेशन के साथ रिपोर्टिंग भाग और बैच अपडेट भाग को जारी करना होगा - और आशा है कि यह रिलीज सभी भागों के लिए सुचारू रूप से चले।

क्या होता है जब आपका बॉस दूसरी प्राथमिकता चाहता है?

तुम्हारा बॉस आज तक आया था। एक नया प्राथमिकता है - CEO। अब आपको सभी कोड को बदलना होगा और एक recompile और redeploy करना होगा।

'Enum-in-the-table' दृष्टिकोण के साथ, आप नई प्राथमिकता के लिए enum सूची को अपडेट करते हैं। सूची को प्राप्त करने वाले सभी कोड इसे डेटाबेस से खींचते हैं।

डेटा शायद ही कभी अकेले खड़ा होता है

प्राथमिकताओं के साथ, अन्य तालिकाओं में डेटा कुंजियाँ जिनमें वर्कफ़्लो के बारे में जानकारी हो सकती है, या जो इस प्राथमिकता या व्हाट्सएप को सेट कर सकते हैं।

लिंग पर वापस जाना जैसा कि सवाल में थोड़ा सा बताया गया है: लिंग के उपयोग में सर्वनामों की एक कड़ी है: he/his/himऔर she/hers/her... और आप कोड में ही कठिन कोडिंग से बचना चाहते हैं। और फिर आपका बॉस आता है और आपको 'OTHER'लिंग जोड़ने की आवश्यकता होती है (इसे सरल रखने के लिए) और आपको इस लिंग से संबंधित होने की आवश्यकता है they/their/them... और आपका बॉस देखता है कि फेसबुक के पास क्या है और ... ठीक है, हाँ।

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

अन्य डेटास्टोर्स के बारे में क्या?

कोई फर्क नहीं पड़ता कि आप इसे कहाँ संग्रहीत करते हैं, वही सिद्धांत मौजूद है।

  • आपके पास एक फ़ाइल हो सकती है priorities.prop, जिसमें प्राथमिकताओं की सूची है। आप एक संपत्ति फ़ाइल से इस सूची को पढ़ें।
  • आपके पास एक डॉक्यूमेंट स्टोर डेटाबेस (जैसे काउचडीबी ) हो सकता है, जिसके लिए एक प्रविष्टि है enums(और फिर जावास्क्रिप्ट में एक सत्यापन फ़ंक्शन लिखें ):

    {
       "_id": "c18b0756c3c08d8fceb5bcddd60006f4",
       "_rev": "1-c89f76e36b740e9b899a4bffab44e1c2",
       "priorities": [ "critical", "high", "medium", "low" ],
       "severities": [ "blocker", "bad", "annoying", "cosmetic" ]
    }
    
  • आपके पास एक स्कीमा की एक XML फ़ाइल हो सकती है:

    <xs:element name="priority" type="priorityType"/>
    
    <xs:simpleType name="priorityType">
      <xs:restriction base="xs:string">
        <xs:enumeration value="critical"/>
        <xs:enumeration value="high"/>
        <xs:enumeration value="medium"/>
        <xs:enumeration value="low"/>
      </xs:restriction>
    </xs:simpleType>
    

मूल विचार एक ही है। डेटा स्टोर ही वह जगह है जहां वैध मूल्यों की सूची को संग्रहीत और लागू करने की आवश्यकता होती है। यहां रखने से, कोड और डेटा के बारे में तर्क करना आसान हो जाता है। आपको हर समय आपके पास क्या है इसकी रक्षात्मक जाँच करने के बारे में चिंता करने की ज़रूरत नहीं है (क्या यह ऊपरी मामला है? या कम? chriticalइस कॉलम में एक प्रकार क्यों है ? आदि ...) क्योंकि आप जानते हैं कि आप डेटास्टर से वापस क्या प्राप्त कर रहे हैं। ठीक उसी तरह, जिस पर दातास्टोर आपको भेजने की उम्मीद कर रहा है अन्यथा - और आप मान्य मूल्यों की सूची के लिए डाटासटोर को क्वेरी कर सकते हैं।

टेकअवे

मान्य मानों का समूह डेटा है , कोड नहीं। आपको DRY कोड के लिए प्रयास करने की आवश्यकता है - लेकिन दोहराव का मुद्दा यह है कि आप कोड को डेटा को डुप्लिकेट कर रहे हैं , बजाय इसके स्थान को डेटा के रूप में सम्मान करने और डेटाबेस में संग्रहीत करने के बजाय।

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

यह परीक्षण अनुप्रयोगों को आसान बनाता है क्योंकि CEOप्राथमिकता शामिल होने पर आपको पूरे आवेदन को पुनः प्राप्त नहीं करना पड़ता है - क्योंकि आपके पास कोई कोड नहीं है जो प्राथमिकता के वास्तविक मूल्य की परवाह करता है।

कोड और डेटा के बारे में स्वतंत्र रूप से एक-दूसरे से सक्षम होने के कारण रखरखाव करते समय बग को ढूंढना और ठीक करना आसान हो जाता है।


6
यदि आप किसी तर्क को बदलने के बिना अपने कोड में एक एनम मान जोड़ सकते हैं (और ऐसा न हो कि यह इसका स्थानीयकृत प्रदर्शन हो), मुझे पहली जगह में अतिरिक्त एनम मूल्य के लिए आवश्यकता पर संदेह है। और जब मैं पुराने SQL बैकअप के साथ आसानी से एक समस्या का विश्लेषण करने के लिए सरल SQL क्वेरी के साथ क्वेरी करने की क्षमता को मानने के लिए पर्याप्त पुराना हूं, तो इन दिनों ORMs के साथ आप अंतर्निहित डेटाबेस को देखने के बिना बहुत अच्छा कर सकते हैं। मैं यहाँ स्थानीयकरण (सर्वनाम) के बारे में बात नहीं समझता हूँ - हालाँकि वह सामान निश्चित रूप से एक डेटाबेस में नहीं होना चाहिए, लेकिन मैं कहूँगा कि कुछ की संसाधन फाइलें।
वू डेस

1
@Voo सर्वनाम इस एनुम्स्क मूल्य से संबंधित अन्य डेटा का एक उदाहरण है । डेटा एक तालिका में होने के बिना, कड़ाई से टाइप किए गए मानों को उचित FK बाधाओं के साथ होने की आवश्यकता होगी। यदि आपके पास संसाधन फ़ाइल में सर्वनाम (जैसे यह) है, तो आपको डेटाबेस और फ़ाइल के बीच युग्मन मिला है (डेटाबेस को अपडेट करें और फ़ाइल को फिर से भेजें)। रेडमीइन के एंप्लम पर विचार करें जो कि रीडेपॉले करने के बिना मक्खी पर व्यवस्थापक इंटरफ़ेस के माध्यम से परिवर्तनीय हैं।

1
... यह भी याद रखें कि डेटाबेस एक पॉलीग्लॉट डेटा स्टोर हैं। यदि आपको एक भाषा में ORM के भाग के रूप में किए जाने वाले सत्यापन की आवश्यकता है, तो आपने किसी अन्य भाषा में उस सत्यापन को डुप्लिकेट करना आवश्यक बना दिया है (मैंने हाल ही में जावा फ्रंट एंड के साथ काम किया था जिसमें पायथन डेटाबेस में डेटा धक्का दे रहा था - जावा ओआरएम और पायथन सिस्टम को चीजों पर सहमत होना पड़ता है - और यह समझौता (वैध प्रकार) डेटाबेस को 'एनम' टेबल के साथ लागू करके सबसे आसानी से लागू किया गया था।)।

2
Enum की Redmine उपयोग @Voo रूप में ही है बगजिला "सबसे महत्वपूर्ण तालिका प्रणाली के कीड़े के सभी शामिल हैं। यह गंभीरता और प्राथमिकता की तरह enum सभी मान सहित विभिन्न बग गुण से बना है।" - इसका फ्री फॉर्म टेक्स्ट फील्ड नहीं है, यह एक ऐसा मूल्य है जो इस ज्ञात और गणना योग्य सेट में से एक है। यह एक संकलित समय नहीं है , लेकिन फिर भी यह पर्याप्त है। मेंटिस भी देखें ।

1
तो पुष्टि करने के लिए - आपकी बात यह है कि लोगों को एनम का उपयोग कभी नहीं करना चाहिए? स्पष्ट नहीं था।
निको

18

इनमें से आपको क्या लगता है कि क्वेरी पढ़ते समय गलतियाँ उत्पन्न होने की अधिक संभावना है?

select * 
from Person 
where Gender = 1

या

select * 
from Person join Gender on Person.Gender = Gender.GenderId
where Gender.Label = "Female" 

लोग SQL में enum टेबल बनाते हैं क्योंकि वे उत्तरार्द्ध को अधिक पठनीय पाते हैं - जिससे SQL लिखने और बनाए रखने में कम त्रुटियां होती हैं।

आप सीधे लिंग को एक स्ट्रिंग बना सकते हैं Person, लेकिन फिर आपको मामले को लागू करने और लागू करने की आवश्यकता होगी। आप चीजों को अनुकूलित करने में आपका DB कितना भयानक है, इसके आधार पर स्ट्रिंग्स और पूर्णांकों के बीच अंतर के कारण तालिका और क्वेरी समय के लिए स्टोरेज हिट बढ़ा सकते हैं।


5
लेकिन फिर हम तालिकाओं में शामिल हो रहे हैं। यदि मेरी इकाई में दो एनम हैं, तो मैं एक साधारण क्वेरी के लिए तीन तालिकाओं में शामिल हो जाऊंगा।
user3748908

11
@ user3748908 - तो? जॉइंट्स वे हैं जो DBs अच्छे हैं, और विकल्प बदतर हैं - कम से कम उन लोगों की नज़र में जिन्होंने इस मार्ग को चुना।
तेलस्तीन

8
@ user3748908: न केवल डेटाबेस वास्तव में जॉइन करने में अच्छे हैं, वे निरंतरता को लागू करने में भी अच्छे हैं। निरंतरता को लागू करना वास्तव में अच्छी तरह से काम करता है, जब आप एक तालिका में एक स्तंभ को दूसरे की पहचान की पंक्ति में इंगित कर सकते हैं और कह सकते हैं "इस स्तंभ के लिए मान उस तालिका में पहचानकर्ताओं में से एक होना चाहिए।"
Blrfl

2
यह सब सच है लेकिन ऐसे कई मामले हैं जहां आपको प्रदर्शन के कारणों से जुड़ने की जरूरत है। मुझे गलत मत समझो मैं इस प्रकार के डिजाइन और शामिल होने के बारे में हूं, लेकिन मैं फेंक रहा हूं कि दुनिया खत्म नहीं होने जा रही है यदि आप पाते हैं कि आपको कभी-कभी प्रदर्शन के कारण जुड़ने की आवश्यकता नहीं है।
जॉन

3
यदि आपको प्रदर्शन कारणों के लिए संदर्भ तालिकाओं में शामिल होने को छोड़ना पड़ रहा है, तो #JonH के लिए आपको एक बड़ा सर्वर खरीदने की आवश्यकता है या बड़ी संख्या में उप-प्रश्नों के माध्यम से विधेय को आगे बढ़ाने की कोशिश करना बंद कर दें (मैं मान रहा हूं कि आप जानते हैं कि आप क्या कर रहे हैं)। संदर्भ तालिकाओं वह सामग्री है जो DB शुरू करने के कुछ सेकंड के भीतर आपके कैश में होनी चाहिए।
बेन

10

मुझे विश्वास नहीं होता कि लोगों ने अभी तक इसका उल्लेख नहीं किया है।

विदेशी कुंजी

अपने डेटाबेस में Enum को रखकर, और उस टेबल पर एक विदेशी कुंजी जोड़कर, जिसमें एक enum मान होता है, आप यह सुनिश्चित करते हैं कि कोई भी कोड उस कॉलम के लिए कभी भी गलत मान दर्ज नहीं करता है। यह आपकी डेटा अखंडता में मदद करता है और सबसे स्पष्ट कारण है कि IMO में आपके पास एनमों के लिए टेबल होनी चाहिए।


सवाल सिर्फ 5 लाइनों का है और स्पष्ट रूप से कहा गया है "शुद्धता लागू करने के स्पष्ट कारण के अलावा"। इसलिए किसी ने इसका उल्लेख नहीं किया क्योंकि ओपी कह रहा है कि यह स्पष्ट है और वह अन्य औचित्य की तलाश में है - PS: मैं आपसे सहमत हूं, यह एक अच्छा पर्याप्त कारण है।
user1007074

6

मैं उस शिविर में हूं जो आपसे सहमत है। यदि आप अपने कोड में एक जेंडर इनम और अपने डेटाबेस में एक tblGender रखते हैं, तो आप रखरखाव में आने वाले समय में परेशानी में पड़ सकते हैं। आपको यह दस्तावेज करने की आवश्यकता होगी कि इन दो संस्थाओं में समान मूल्य होने चाहिए और इस प्रकार आपके द्वारा किए गए किसी भी परिवर्तन को दूसरे को भी करना होगा।

फिर आपको अपनी संग्रहीत प्रक्रियाओं में एनम मानों को पास करने की आवश्यकता होगी:

create stored procedure InsertPerson @name varchar, @gender int
    insert into tblPeople (name, gender)
    values (@name, @gender)

लेकिन सोचिए कि अगर आपने इन मूल्यों को डेटाबेस टेबल में रखा तो आप यह कैसे करेंगे:

create stored procedure InsertPerson @name varchar, @genderName varchar
    insert into tblPeople (name, gender)
    select @name, fkGender
    from tblGender
    where genderName = @genderName --I hope these are the same

निश्चित संबंधपरक डेटाबेस को दिमाग में जोड़ के साथ बनाया जाता है, लेकिन कौन सा क्वेरी पढ़ना आसान है?


यहाँ एक और उदाहरण क्वेरी है:

create stored procedure SpGetGenderCounts
    select count(*) as count, gender
    from tblPeople
    group by gender

इस से तुलना करें:

create stored procedure SpGetGenderCounts
    select count(*) as count, genderName
    from tblPeople
    inner join tblGender on pkGender = fkGender
    group by genderName --assuming no two genders have the same name

यहाँ एक और उदाहरण क्वेरी है:

create stored procedure GetAllPeople
    select name, gender
    from tblPeople

ध्यान दें कि इस उदाहरण में, आपको अपने परिणाम में लिंग सेल को एक इंटम से एनम में बदलना होगा। ये रूपांतरण हालांकि आसान हैं। इस से तुलना करें:

create stored procedure GetAllPeople
    select name, genderName
    from tblPeople
    inner join tblGender on pkGender = fkGender

डेटाबेस से बाहर की परिभाषाओं को रखने के आपके विचार के साथ जाने पर ये सभी प्रश्न छोटे और अधिक रख-रखाव वाले होते हैं।


1
क्या होगा अगर यह लिंग नहीं था। मुझे लगता है कि हम लिंग के आधार पर भी मैदान में उतर रहे हैं। क्या होगा अगर ओपी ने कहा था "तो चलो कहते हैं कि मेरे पास एक इकाई बग है जिसमें एक प्राथमिकता क्षेत्र है" - क्या आपका उत्तर बदल जाएगा?

4
@MichaelT "प्राथमिकता" के संभावित मूल्यों की सूची कम से कम उसी सीमा तक कोड का एक हिस्सा है जहां यह डेटा का एक हिस्सा है। आप विभिन्न प्राथमिकताओं के लिए ग्राफिकल आइकन देखते हैं? आपको उम्मीद नहीं है कि वे डेटाबेस से खींच लिए गए हैं? और सामान की तरह थीमाधारित और स्टाइल किया जा सकता है और अभी भी डीबी में संग्रहीत मूल्यों की एक ही श्रृंखला का प्रतिनिधित्व करता है। आप इसे डेटाबेस में वैसे भी नहीं बदल सकते हैं; आपके पास सिंक करने के लिए प्रेजेंटेशन कोड है।
यूजीन रयबत्सेव

1

मैं इस तथ्य के लिए एक जेंडर तालिका बनाऊंगा कि इसका उपयोग डेटा विश्लेषण में किया जा सकता है। मैं रिपोर्ट बनाने के लिए डेटाबेस में सभी पुरुष या महिला व्यक्तियों को देख सकता था। जितना अधिक आप अपने डेटा को देख सकते हैं, ट्रेंडिंग जानकारी की खोज करना उतना ही आसान होगा। जाहिर है, यह बहुत सरल गणना है, लेकिन जटिल गणना (जैसे दुनिया के देशों या राज्यों) के लिए, विशेष रिपोर्ट तैयार करना आसान बनाता है।


1

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

हालाँकि, जैसे ही आप डेटाबेस को एक्सेस करने वाले कई एप्लिकेशन होने की संभावना पर विचार करना चाहते हैं, तब एनम के लिए एक टेबल बहुत मायने रखता है (अन्य उत्तर अधिक विवरण में क्यों जाते हैं)। आपको या किसी अन्य डेवलपर पर विचार करने के लिए दूसरी बात कच्चे डेटाबेस डेटा को देखना चाहते हैं। यदि हां, तो इसे एक और एप्लिकेशन उपयोग माना जा सकता है (सिर्फ एक जहां लैब गेज कच्चा एसक्यूएल है)।

यदि आपके पास कोड (क्लीनर कोड के लिए और समय की जाँच करने के लिए) के साथ-साथ डेटाबेस में एक तालिका है, तो मैं यह सत्यापित करने के लिए इकाई परीक्षण जोड़ने की सलाह दूंगा कि दोनों सिंक में हैं।


1

जब आपके पास एक कोड एन्यूमरेशन होता है जो कोड में व्यावसायिक तर्क को चलाने के लिए उपयोग किया जाता है, तो आपको अभी भी ऊपर / नीचे विस्तृत कई कारणों के लिए DB में डेटा का प्रतिनिधित्व करने के लिए एक तालिका बनानी चाहिए। यहां कुछ युक्तियां दी गई हैं ताकि यह सुनिश्चित किया जा सके कि आपके DB मान कोड मानों के साथ मेल खाते हैं:

  1. पहचान फ़ील्ड के टेबल पर आईडी फ़ील्ड न बनाएं। फ़ील्ड के रूप में आईडी और विवरण शामिल करें।

  2. तालिका में कुछ अलग करें जो डेवलपर्स को यह जानने में मदद करता है कि मान अर्ध-स्थिर हैं / एक कोड एन्यूमरेशन से बंधा हुआ है। अन्य सभी लुक-अप तालिकाओं में (आमतौर पर उपयोगकर्ताओं द्वारा मूल्यों को जोड़ा जा सकता है) मेरे पास आमतौर पर एक LastChangedDateTime और LastChangedBy है, लेकिन एनम से संबंधित तालिकाओं पर नहीं होने से मुझे यह याद रखने में मदद मिलती है कि वे केवल डेवलपर्स द्वारा परिवर्तनशील हैं। यह दस्तावेज।

  3. सत्यापन कोड बनाएं जो यह जांचता है कि गणना में प्रत्येक मान संबंधित तालिका में है, और केवल वही मान संबंधित तालिका में हैं। यदि आपके पास स्वचालित अनुप्रयोग "स्वास्थ्य परीक्षण" है जो पोस्ट-बिल्ड चलाते हैं, तो वहां पर। यदि नहीं, तो जब भी IDE में एप्लिकेशन चल रहा हो, कोड को एप्लिकेशन स्टार्टअप पर स्वचालित रूप से चलाएं।

  4. प्रोडक्शन डिलीवर एसक्यूएल स्क्रिप्ट्स करें जो ऐसा ही करें, लेकिन डीबी के अंदर से। अगर सही तरीके से बनाया जाए तो वे पर्यावरण के साथ-साथ पलायन में भी मदद करेंगे।


0

यह भी निर्भर करता है कि डेटा का उपयोग कौन करता है। यदि आपके पास बस एक आवेदन है जो ठीक हो सकता है। यदि आप डेटा वेयरहाउस या रिपोर्टिंग सिस्टम में जोड़ते हैं। उन्हें यह जानने की आवश्यकता होगी कि उस कोड का क्या अर्थ है, कोड का मानव redable संस्करण क्या है।

आमतौर पर, टाइप टेबल को कोड में एनम के रूप में डुप्लिकेट नहीं किया जाएगा। आप कैश्ड सूची में टाइप तालिका लोड कर सकते हैं।

Class GenderList

   Public Shared Property UnfilteredList
   Public Shared Property Male = GetItem("M")
   Public Shared Property Female = GetItem("F")

End Class

अक्सर, टाइप आते हैं और जाते हैं। जब नया प्रकार जोड़ा गया था, तो आपको एक तारीख की आवश्यकता होगी। जानिए जब एक विशिष्ट प्रकार को हटा दिया गया था। जरूरत पड़ने पर ही इसे प्रदर्शित करें। क्या होगा अगर एक ग्राहक लिंग के रूप में "ट्रांसजेंडर" चाहता है, लेकिन अन्य ग्राहक नहीं हैं? इस जानकारी के सभी डेटाबेस में सबसे अच्छा संग्रहीत है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.