RDBMS में कई डिज़ाइन सामान्यीकरण की उपेक्षा क्यों करते हैं?


23

मुझे कई डिज़ाइन देखने को मिले कि निर्णय लेने के चरण में सामान्यीकरण पहला विचार नहीं था।

कई मामलों में उन डिज़ाइनों में 30 से अधिक कॉलम शामिल थे, और मुख्य दृष्टिकोण "एक ही स्थान पर सब कुछ डालने के लिए" था।

मुझे याद है कि सामान्यीकरण सबसे पहले, सबसे महत्वपूर्ण चीजों में से एक है, इसलिए कभी-कभी इसे इतनी आसानी से क्यों छोड़ दिया जाता है?

संपादित करें:

क्या यह सच है कि अच्छे आर्किटेक्ट और विशेषज्ञ एक असमान्य डिजाइन चुनते हैं जबकि गैर-अनुभवी डेवलपर्स इसके विपरीत चुनते हैं? मन में सामान्यीकरण के साथ अपने डिजाइन को शुरू करने के खिलाफ तर्क क्या हैं?


7
चूँकि सामान्यीकृत DBs को सबसे तुच्छ प्रश्नों पर भी बहुत कुछ मिल जाता है
शाफ़्ट फ्रीक

1
उन जुड़ावों को अभी भी विचारों द्वारा छिपे हुए होने की आवश्यकता होगी
शाफ़्ट सनकी

29
कई प्रोग्रामर रिलेशनल मॉडल की मूल बातें नहीं जानते हैं।
माइक

10
"जब तक यह दर्द होता है, तब तक सामान्य करें जब तक यह काम नहीं करता है तब तक इसे सामान्य करें"। codinghorror.com/blog/2008/07/… के पास कुछ अच्छे उत्तर हैं।
मैथ्यू स्टीप्ट्स 29'13

3
वे इसे अनदेखा करते हैं क्योंकि उन्हें डीबीए, बीआई विश्लेषकों या सुरक्षा लेखा परीक्षकों को जवाब नहीं देना पड़ता है।
हारून

जवाबों:


19

इस प्रश्नोत्तर के बारे में क्या दिलचस्प है कि वास्तव में 3 प्रश्न हैं। हर किसी ने एक अलग उत्तर दिया है, और लगभग किसी ने भी पहले एक का उत्तर नहीं दिया है:

  1. क्यों नहीं कर रहे हैं जंगल में कुछ डेटाबेस सामान्यीकृत?
  2. क्यों / कब एक सामान्यीकृत डेटाबेस को वंचित किया जाना चाहिए ?
  3. पहली बार में सामान्य करना किन परिस्थितियों में हानिकारक या अनावश्यक है?

सचेतक पाठक ध्यान देंगे कि ये बहुत अलग प्रश्न हैं, और मैं बहुत अधिक विस्तार से बचने के दौरान उनमें से प्रत्येक का अलग-अलग उत्तर देने का प्रयास करूंगा। "बहुत अधिक" से, मेरा मतलब है कि मुझे नहीं लगता कि यह उपयुक्त संदर्भ है जिसमें विभिन्न तर्कों के गुणों पर सामान्यीकरण के पक्ष में या उसके खिलाफ एक विस्तारित बहस को अंजाम दिया जाना है; मैं बस यह समझाने जा रहा हूं कि वे तर्क क्या हैं, शायद कुछ कैविएट को सूचीबद्ध करें, और अधिक विशिष्ट प्रश्नों के लिए दर्शन को बचाएं, अगर वे कभी भी आते हैं।

इसके अलावा, इस उत्तर में मैं मान रहा हूं कि "सामान्यीकरण" का अर्थ है "बीसीएनएफ, 3 एनएफ, या कम से कम 2 एनएफ" , क्योंकि यह सामान्यीकरण का स्तर है जिसे डिजाइनर आमतौर पर प्राप्त करने का लक्ष्य रखते हैं। यह 4NF या 5NF डिज़ाइन देखने के लिए दुर्लभ है; हालांकि वे निश्चित रूप से असंभव लक्ष्य नहीं हैं, वे केवल अपने प्रतिनिधित्व के बजाय रिश्तों के शब्दार्थ के साथ खुद को चिंतित करते हैं , जो कि डोमेन के बारे में काफी अधिक ज्ञान की आवश्यकता होती है।

तो, आगे और ऊपर:

1. क्यों कुछ डेटाबेस में सामान्यीकृत नहीं हैं?

इसका जवाब सकता है "क्योंकि वे नहीं होना चाहिए" हो सकता है, लेकिन यह है कि इस धारणा सही बल्ले से दूर कर रही है सुंदर पेशाब गरीब जासूसी काम है। हम एक समाज के रूप में बहुत प्रगति नहीं करेंगे अगर हम हमेशा इस धारणा पर काम करते हैं कि जो कुछ भी है, वह होना चाहिए।

डेटाबेस में सामान्य नहीं होने के वास्तविक कारण अधिक जटिल हैं। यहाँ शीर्ष 5 हैं जिन्हें मैंने देखा है:

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

  • जिन डेवलपर्स ने इसे डिज़ाइन किया था वे सिद्धांत पर ध्यान नहीं देते थे या सामान्य रूप से सक्रिय नहीं थे । ध्यान दें, यहां मैं ऐसे उदाहरणों के बारे में बात नहीं कर रहा हूं, जहां एक जानबूझकर निर्णय प्रासंगिक विश्लेषण के आधार पर सामान्य करने के लिए नहीं किया गया था, बल्कि टीमों या कंपनियों को जहां सामान्यीकरण अधिक-या-कम समझा जाता है, लेकिन बस नजरअंदाज कर दिया जाता है या आदत से बाहर कर दिया जाता है। फिर, आश्चर्यजनक रूप से आम है।

  • सॉफ्टवेयर एक ब्राउनफील्ड परियोजना के रूप में किया गया है । कई शुद्धतावादी सामान्यीकरण न करने के तकनीकी कारण के बजाय इस पूरी तरह से वैध व्यवसाय की उपेक्षा करते हैं । कभी-कभी आपको वास्तव में खरोंच से एक नया डेटाबेस डिजाइन करने के लिए नहीं मिलता है, आपको एक मौजूदा विरासत स्कीमा पर बोल्ट करना होगा, और उस बिंदु पर सामान्य करने का प्रयास करना होगा जिसमें बहुत अधिक दर्द होगा। 3NF का आविष्कार 1971 तक नहीं किया गया था, और कुछ प्रणालियों - विशेष रूप से वित्तीय / लेखा प्रणालियों - की जड़ें इससे भी ज्यादा दूर हैं!

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

  • एक जानबूझकर व्यापार निर्णय व्यापार विश्लेषण या डेटाबेस डिजाइन पर किसी भी समय खर्च नहीं करने के लिए किया गया था और बस "इसे पूरा करें"। यह अक्सर एक गलत अर्थव्यवस्था है और अंततः तकनीकी ऋण का एक बढ़ता हुआ रूप बन जाता है , लेकिन कभी-कभी एक तर्कसंगत निर्णय होता है, कम से कम जानकारी के आधार पर जो उस समय ज्ञात थी - उदाहरण के लिए, डेटाबेस का उद्देश्य एक प्रोटोटाइप के रूप में किया गया हो सकता है लेकिन समाप्त हो गया समय की कमी या कारोबारी माहौल में बदलाव के कारण उत्पादन उपयोग को बढ़ावा दिया जा रहा है।

2. क्यों और कब एक सामान्यीकृत डेटाबेस को वंचित किया जाना चाहिए?

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

  • अनुक्रमित विचार बनाएं जो सबसे आम समस्या क्षेत्रों को घेरता है। आधुनिक DBMSes उन्हें डालने योग्य या अद्यतन करने योग्य बनाने में सक्षम हैं (जैसे SQL सर्वर INSTEAD OFट्रिगर)। यह अंतर्निहित टेबल्स / इंडेक्स पर डीएमएल बयानों के लिए मामूली लागत पर आता है लेकिन आम तौर पर पहला विकल्प आपको प्रयास करना चाहिए क्योंकि इसे खराब करना लगभग असंभव है और लागत को बनाए रखने के लिए लगभग कुछ भी नहीं है। बेशक, प्रत्येक क्वेरी को अनुक्रमित दृश्य में नहीं बदला जा सकता है - समग्र प्रश्न सबसे अधिक परेशानी वाले हैं। जो हमें अगले आइटम की ओर ले जाता है ...

  • स्वचालित रूप से ट्रिगर्स द्वारा अद्यतन किए जाने वाले हरित सारणी बनाएं। ये टेबल सामान्यीकृत तालिकाओं के अलावा मौजूद हैं और एक प्रकार का CQRS मॉडल बनाते हैं । एक और CQRS मॉडल, इन दिनों अधिक लोकप्रिय है, क्वेरी मॉडल को अपडेट करने के लिए पब / उप का उपयोग करना है, जो अतुल्यकालिक का लाभ देता है, हालांकि यह बहुत दुर्लभ उदाहरणों में उपयुक्त नहीं हो सकता है जहां डेटा बासी नहीं हो सकता है।

  • कभी-कभी, अनुक्रमित विचार संभव नहीं होते हैं, स्वीकार्य प्रदर्शन के साथ ट्रिगर को स्वीकार करने के लिए लेनदेन की दरें और डेटा वॉल्यूम बहुत अधिक हैं, और प्रश्नों को हमेशा रीयलटाइम डेटा वापस करना होगा। ये स्थितियां दुर्लभ हैं - मुझे लगता है कि वे हाई-फ़्रीक्वेंसी ट्रेडिंग या कानून प्रवर्तन / खुफिया डेटाबेस जैसी चीज़ों पर लागू हो सकते हैं - लेकिन वे मौजूद हो सकते हैं। इन मामलों में आपके पास वास्तव में कोई विकल्प नहीं होता है, लेकिन मूल तालिकाओं को अपभ्रंश करने के लिए।

3. किन स्थितियों में पहली जगह पर इसे सामान्य करना हानिकारक या अनावश्यक है?

वास्तव में, यहाँ कई अच्छे उदाहरण हैं:

  • यदि डेटाबेस का उपयोग केवल रिपोर्टिंग / विश्लेषण के लिए किया जा रहा है । आमतौर पर इसका तात्पर्य है कि ओएलटीपी के लिए उपयोग किया जा रहा एक अतिरिक्त , सामान्यीकृत डेटाबेस है, जो समय-समय पर ईटीएल या मैसेजिंग के माध्यम से विश्लेषण डेटाबेस के लिए सिंक्रनाइज़ किया जाता है।

  • जब एक सामान्य मॉडल लागू करने के लिए आने वाले डेटा का अनावश्यक रूप से जटिल विश्लेषण की आवश्यकता होगी। इसका एक उदाहरण एक ऐसी प्रणाली हो सकती है जिसे कई बाहरी प्रणालियों या डेटाबेस से एकत्र किए गए फोन नंबरों को संग्रहीत करने की आवश्यकता होती है। आप कॉल कोड और क्षेत्र कोड को असामान्य कर सकते हैं , लेकिन आपको विभिन्न स्थानों का उल्लेख नहीं करने के लिए सभी संभावित प्रारूपों, अमान्य फ़ोन नंबर, वैनिटी नंबर (1-800-GET-STUFF) के लिए खाता बनाना होगा। यह आमतौर पर इसके लायक होने की तुलना में अधिक परेशानी है, और फोन नंबर आमतौर पर केवल एक ही क्षेत्र में छोड़े जाते हैं जब तक कि आपके पास क्षेत्र कोड के लिए विशिष्ट व्यवसाय की आवश्यकता न हो ।

  • जब रिलेशनल डेटाबेस मुख्य रूप से एक अतिरिक्त, गैर-रिलेशनल डेटाबेस के लिए लेन-देन का समर्थन प्रदान करने के लिए होता है। उदाहरण के लिए, आप रिलेशनल डेटाबेस का उपयोग संदेश कतार के रूप में, या लेन-देन या गाथा की स्थिति को ट्रैक करने के लिए कर सकते हैं, जब प्राथमिक डेटा Redis या MongoDB में या जो भी संग्रहीत किया जा रहा हो। दूसरे शब्दों में, डेटा "नियंत्रण डेटा" है। आमतौर पर डेटा को सामान्य करने का कोई मतलब नहीं है जो वास्तव में व्यावसायिक डेटा नहीं है

  • सेवा-उन्मुख आर्किटेक्चर जो एक भौतिक डेटाबेस साझा करते हैं। यह थोड़ा अजीब है, लेकिन एक सच्चे SOA में, आपको कभी-कभार शारीरिक रूप से डुप्लिकेट होने के लिए डेटा की आवश्यकता होगी क्योंकि सेवाओं को एक दूसरे के डेटा को सीधे क्वेरी करने की अनुमति नहीं है। अगर वे ऐसा ही भौतिक डेटाबेस को साझा करने, डाटा होगा दिखाई सामान्यीकृत करने के लिए नहीं - लेकिन आम तौर पर, प्रत्येक व्यक्ति सेवा के स्वामित्व वाला डेटा है अभी भी सामान्य जब तक कि अन्य कम करने वाले कारकों में से एक ही स्थान पर है। उदाहरण के लिए, एक बिलिंग सेवा बिल इकाई की मालिक हो सकती है, लेकिन लेखा सेवा को उस वर्ष के लिए राजस्व में शामिल करने के लिए बिल दिनांक और राशि प्राप्त करने और संग्रहीत करने की आवश्यकता होती है।

मुझे यकीन है कि अधिक कारण हैं जो मैंने सूचीबद्ध नहीं किए हैं; जो मुझे मिल रहा है, संक्षेप में, यह है कि वे काफी विशिष्ट हैं और व्यवहार में आने पर काफी स्पष्ट होंगे। OLAP डेटाबेस को स्टार स्कीमा का उपयोग करने के लिए माना जाता है, SOA को कुछ दोहराव आदि के रूप में माना जाता है, यदि आप एक प्रसिद्ध आर्किटेक्चर मॉडल के साथ काम कर रहे हैं जो बस सामान्यीकरण के साथ काम नहीं करता है, तो आप सामान्य नहीं करते हैं; सामान्यतया, आर्किटेक्चर मॉडल डेटा मॉडल पर पूर्वता लेता है।

और बहुत अंतिम प्रश्न का उत्तर देने के लिए:

क्या यह सच है कि अच्छे आर्किटेक्ट और विशेषज्ञ एक असमान्य डिजाइन चुनते हैं जबकि गैर-अनुभवी डेवलपर्स इसके विपरीत चुनते हैं? मन में सामान्यीकरण के साथ अपने डिजाइन को शुरू करने के खिलाफ तर्क क्या हैं?

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

3NF या BCNF डेटाबेस आमतौर पर विश्लेषण के लिए एक अच्छा शुरुआती बिंदु है क्योंकि यह पूरी दुनिया में दसियों हज़ारों परियोजनाओं में आजमाया और सिद्ध किया गया है, लेकिन फिर से, इसलिए सी। का मतलब यह नहीं है कि हम स्वचालित रूप से हर में सी का उपयोग करते हैं। नया काम। वास्तविक दुनिया की स्थितियों में मॉडल के लिए कुछ संशोधनों या पूरी तरह से एक अलग मॉडल के उपयोग की आवश्यकता हो सकती है। जब तक आप कर रहे हैं आप नहीं जानते कि में उस स्थिति।


1
आपको इसे एक ब्लॉग लेख में कॉपी-पेस्ट करना चाहिए ... यह स्वर्ण है।
मार्सेल पोपस्कु

15

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

सामान्यीकरण से आपको कुछ महत्वपूर्ण लाभ मिलते हैं:

  1. अतिरेक डेटा की मात्रा को कम करता है।
  2. डेटा की अखंडता सुनिश्चित करने के लिए डेटाबेस की अखंडता तंत्र (विदेशी प्रमुख बाधाओं, विशिष्टता की कमी) में निर्मित सीमा को अधिकतम करता है।
  3. कुछ मामलों में IO की दक्षता को बढ़ाते हुए प्रति पंक्ति कॉलम की संख्या कम करता है। विस्तृत पंक्तियों को पुनर्प्राप्त करने में अधिक समय लगता है।

यह कहा गया है कि, वंचित करने के लिए बहुत सारे वैध कारण हैं:

  1. प्रदर्शन, विशेष रूप से विश्लेषिकी के लिए, सामान्यीकरण से अपंग हो सकता है। संबंधपरक डेटाबेस के खिलाफ विश्लेषण के लिए, आयामी आयामी मॉडल मानक दृष्टिकोण हैं।
  2. डेटाबेस के अंदर डेटा अखंडता को लागू करने का लाभ कम होने लगा है। जैसा कि अधिक से अधिक विकास वस्तु-उन्मुख मध्य-स्तरीय पर केंद्रित है जो अक्सर व्यापार नियमों को लागू कर रहा है, डेटाबेस में रिलेशनल बाधाओं पर निर्भरता कम महत्वपूर्ण है।
  3. जैसा कि दूसरों ने उल्लेख किया है, सामान्यीकरण प्रासंगिक डेटा को पुनः प्राप्त करने के लिए आवश्यक प्रश्नों को जटिल करेगा।

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

ऊपर की टिप्पणियों में संदर्भित जेफ एटवुड का लेख कुछ अच्छी विस्तृत चर्चा प्रदान करता है - "शायद सामान्यीकरण सामान्य नहीं है"


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

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

1
मैं सहमत हूँ। मुझे लगता है कि DBA द्वारा सामान्यीकरण का उपयोग कई बार किया जाता है जिसमें सिखाया गया है कि यह सबसे अच्छा डिज़ाइन है। मैंने हमेशा सुझाव दिया है कि DBAs अपनी इच्छानुसार ETL में तालिकाओं को सामान्य कर सकते हैं, लेकिन जब यह तालिका UI संदर्भों की बात आती है, तो मुझे उन तालिकाओं की आवश्यकता होती है जो अत्यधिक जोड़ के बिना क्वेरी करना आसान हो। मैंने उन तालिकाओं में भाग लिया है जो बहुत अधिक सामान्यीकृत थीं, इसलिए होर्स समस्या निवारण खर्च किए बिना उपयोगकर्ता समस्याओं का मुश्किल से निवारण कर सकते थे।
L_7337

1
यदि आप एक सामान्यीकृत मॉडल से शुरू करने में असमर्थ हैं , तो ए.यू. गर्भनिरोधक, एनालिटिक्स मुश्किल है । मुझे बस इस अभ्यास से गुजरना था, और यह नरक था। एप्लिकेशन डेवलपर्स को यह कभी नहीं मान लेना चाहिए कि एक सामान्य स्कीमा विश्लेषणात्मक जरूरतों के लिए उपयुक्त होने जा रहा है। और सामान्यीकरण के खिलाफ बिंदु # 3 के लिए, यह एक ऐसी समस्या है जो भौतिक / अनुक्रमित विचारों द्वारा लगभग तुच्छ रूप से हल की गई है।
Aaronaught

1
और # 2 उचित लगता है, लेकिन व्यवहार में साख नहीं है - मुझे अपने 10+ वर्षों में एक भी उदाहरण देखने की याद नहीं है, जहां बाधाओं को वास्तव में पूरी तरह से आवेदन द्वारा लागू किया गया था। अधिक बार, डेवलपर्स या तो गलत तरीके से डेटा की अखंडता के लिए व्यावसायिक नियमों की बराबरी करते हैं या इस तथ्य का उपयोग करते हैं कि ORMs सैद्धांतिक रूप से रिलेशनल बाधाओं को एक बहाने के रूप में लागू कर सकते हैं कहीं भी ऐसा करने के लिए नहीं। शायद मैं सिर्फ निंदक हूं, लेकिन मेरे सभी करियर के अनुभव ने मुझे सिखाया है कि "आवेदन डेटा अखंडता को लागू करेगा" जैसे बयान लाल झंडे हैं।
Aaronaught

11
  1. बहुत सारे डेवलपर्स सामान्यीकरण के बारे में, या डेटा मॉडलिंग या डेटाबेस के बारे में नहीं जानते या परवाह नहीं करते हैं।
  2. कुछ नौकरियों के लिए यह वास्तव में महत्वपूर्ण नहीं है।
  3. कभी-कभी डी-सामान्य करने का एक बहुत अच्छा कारण होता है, उदाहरण के लिए एक विशेष कठिन कार्यभार को अच्छा प्रदर्शन करने के लिए।
  4. संबंधपरक डेटाबेस अवधारणाएं हाल ही में फैशन में कम हैं क्योंकि वे 1990 और 2000 के दशक में थीं। डेवलपर्स फैशन से प्रभावित होते हैं, भले ही वे बहुत तर्कसंगत होने का दावा करते हों। स्वाद के बारे में बहस करने का कोई मतलब नहीं है।

सामान्यीकरण भी, ऐतिहासिक रूप से, धार्मिक तर्क के लिए एक क्षेत्र है, इसलिए मैं और अधिक कहने में संकोच करता हूं।


मैं यह जोड़ना चाहता हूं कि कभी-कभी रिलेशनल एक डेटाबेस के लिए सही डिजाइन नहीं है; उदाहरण के लिए, एक LDAP निर्देशिका पदानुक्रमित है, कुछ अन्य प्रकार के फ्लैट डिजाइन द्वारा बेहतर सेवा की जा सकती है।
मैक्सिमस मिनिमस

1
जहाँ तक # 4 बिंदु है, मैं कहूँगा कि संबंधपरक डेटाबेस फैशन में कम हैं और नोसक्ल किस्मों के लिए बदली जाने लगी हैं, और यह वास्तव में बहुत बड़ी बात है। लेकिन मुझे आरडीबीएमएस का उपयोग करके गैर-संबंधपरक डेटा मॉडल को एक साथ फेंकने वाले बहुत सारे मूवर्स और शेकर्स दिखाई नहीं देते हैं। वह सिर्फ बेवकूफ है।
आरोहण

@ जोशप - धन्यवाद, अच्छा सारांश। बिंदु # 3 वह है जिसे मैं व्यक्तिगत रूप से अधिक रुचि रखता हूं। अन्य कारक सामान्यीकरण की आवश्यकता को "हरा" क्यों करते हैं।
योसी डाहारी

@JimmyShelter मैं सहमत हूं। एक तरफ फैशन, रिलेशनल हमेशा सबसे अच्छा विकल्प नहीं है।
जोश सेप 29'13

4
@ योसी - कुछ कारण सामान्य कर सकते हैं ट्रम्प सामान्यीकरण यह है कि सामान्यीकरण डेटा को सम्मिलित, अद्यतन और हटाए जाने पर सामान्य डेटा संगतता समस्याओं से बचने की एक तकनीक है। यदि डेटा एक बार लिखा जाता है और उसके बाद ही पढ़ा जाता है तो सीआरयूडी के सी, यू और डी किसी भी अधिक मायने नहीं रखते हैं। ऐसी स्थिति में सामान्यीकरण के लाभ मूल रूप से निरर्थक होते हैं, इसलिए अन्य प्रतिस्पर्धी दबाव पूर्वता ले सकते हैं, जैसे कि पठन प्रदर्शन या क्वेरी योग्यता।
जोएल ब्राउन

9

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

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

खराब डेटाबेस डिजाइन के लिए एक अन्य कारक यह तथ्य है कि सामान्यीकरण एक विशेष विषय नहीं है, विशेष रूप से जब यह 4 वें एनएफ, 5 वें एनएफ, आदि के लिए आता है। ज्यादातर किताबें जो मैंने देखी हैं, उन रूपों को अच्छी तरह से स्पष्ट रूप से नहीं समझा सकती हैं। आमतौर पर खराब उदाहरण और बहुत अधिक सिद्धांत है। यह विषय को जितना चाहिए उससे कम लोकप्रिय बनाता है।

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

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


क्या आप डेटाबेस डिजाइन गुणवत्ता (न केवल स्कीमा, बल्कि प्रक्रियाएं) दस्तावेज़ / लेख सुझा सकते हैं?
तिलक

"एक ही मेज पर कई कॉलम होने से सामान्यीकरण नहीं हो पाता है" -सुरक्षा का इरादा था। प्रश्न में मैंने सिर्फ सरलता के लिए # कॉलम का उल्लेख किया था, मेरी धारणा यह थी कि पाठक सहसंबंध को समझेगा और इसके द्वारा मेरा क्या मतलब है
योसी डाहारी

@ तिलक, मुझे यकीन नहीं है कि सबसे अच्छा दिशानिर्देश प्राप्त करने के लिए एक विशिष्ट संदर्भ है, लेकिन आप डेटा मॉडलिंग और डेटाबेस डिजाइन साहित्य से अपनी सूची एकत्र कर सकते हैं। क्षमा करें यदि यह आपके प्रश्न का उत्तर नहीं देता है। मुझे लगता है कि यह एक किताब के लिए एक अच्छा विषय हो सकता है।
NoChance
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.