आपको कब वंचित करना चाहिए?


45

मुझे लगता है कि हम सभी डेटाबेस सामान्यीकरण से परिचित हैं ।

मेरा सवाल यह है: जब आप टेबलों को असामान्य बनाना चाहते हैं, तो आप कौन से दिशानिर्देशों का उपयोग करते हैं?


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


1
संभावित डुप्लिकेट / संबंधित जानकारी जब डेटाबेस डिज़ाइन को असामान्य बनाने के लिए
जॉन

जवाबों:


34

जब ओएलएपी ऑपरेशन हो तो इसे सामान्य करें, जब ओएलटीपी हो (सेक्शन डीमोर्नाइजेशन से जुड़े लेख से) सामान्य करें

ऑनलाइन लेनदेन प्रसंस्करण (ओएलटीपी) के लिए इच्छित डेटाबेस आमतौर पर ऑनलाइन विश्लेषणात्मक प्रसंस्करण (ओएलएपी) के लिए इच्छित डेटाबेस की तुलना में अधिक सामान्यीकृत होते हैं। ओएलटीपी एप्लिकेशन को छोटे लेनदेन की एक उच्च मात्रा की विशेषता है जैसे कि सुपरमार्केट चेकआउट काउंटर पर बिक्री रिकॉर्ड को अपडेट करना। उम्मीद यह है कि प्रत्येक लेनदेन डेटाबेस को सुसंगत स्थिति में छोड़ देगा। इसके विपरीत, OLAP संचालन के लिए अभिप्रेत डेटाबेस मुख्य रूप से "ज्यादातर पढ़ा" डेटाबेस हैं। OLAP एप्लिकेशन ऐतिहासिक डेटा निकालने के लिए होते हैं जो लंबे समय तक जमा हुए हैं। इस तरह के डेटाबेस के लिए, निरर्थक या "अस्वीकृत" डेटा व्यापार खुफिया अनुप्रयोगों को सुविधाजनक बना सकते हैं। विशेष रूप से, स्टार स्कीमा में आयामी तालिकाओं में अक्सर अपभ्रंश डेटा होते हैं। अशुद्ध या निरर्थक डेटा को निकालने, बदलने, लोड (ETL) प्रसंस्करण के दौरान सावधानीपूर्वक नियंत्रित किया जाना चाहिए, और उपयोगकर्ताओं को डेटा को देखने की अनुमति नहीं दी जानी चाहिए जब तक कि यह एक सुसंगत स्थिति में न हो। स्टार स्कीमा का सामान्यीकृत विकल्प स्नोफ्लेक स्कीमा है। कई मामलों में, कंप्यूटर और RDBMS सॉफ़्टवेयर के रूप में विकेंद्रीकरण की आवश्यकता कम हो गई है, लेकिन चूंकि हार्डवेयर और सॉफ़्टवेयर प्रदर्शन के साथ-साथ डेटा वॉल्यूम में आम तौर पर वृद्धि हुई है, इसलिए OLAP डेटाबेस अक्सर अभी भी सामान्यीकृत स्कीमा का उपयोग करते हैं।

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


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

रसीला और बहुत मददगार। मैं डीबीए की परिधि पर काम कर रहा हूं और यह बहुत सारी चीजों को पूर्ण दायरे में लाने में मदद करता है।
जेसन पी सॉलिंगर

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

22

जब तक यह दर्द होता है, तब तक इसे सामान्य करें, तब तक इसे सामान्य करें जब तक यह काम न करे (यानी: प्रदर्शन स्वीकार्य हो जाता है) :)


5
यह शायद सबसे अच्छा जवाब नहीं है, लेकिन यह सबसे अच्छा वन-लाइनर्स में से एक है जिसे मैंने स्टैक ओवरफ्लो पर देखा है :)
ओवेन

15

नियंत्रित विकेंद्रीकरण को लागू करने का एक संभावित समझदार कारण यह है कि यह आपको डेटा के कुछ अखंडता अवरोधों को लागू करने में सक्षम बनाता है जो अन्यथा संभव नहीं होगा। अधिकांश SQL DBMS को मल्टी-टेबल बाधाओं के लिए बेहद सीमित समर्थन है। एसक्यूएल में कभी-कभी कुछ बाधाओं को लागू करने का एकमात्र प्रभावी तरीका यह सुनिश्चित करना है कि बाधा में शामिल विशेषताएँ सभी एक ही तालिका में मौजूद हैं - तब भी जब सामान्यीकरण यह तय करेगा कि वे अलग-अलग तालिकाओं में हैं।

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

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

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


4

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


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

3

मैं नियमित रूप से अपभ्रंश करता हूं ताकि मैं बाधाओं के साथ डेटा अखंडता को लागू कर सकूं। इस साइट पर एक उदाहरण हाल ही में एक प्रश्न है - मैं किसी अन्य तालिका में एक कॉलम को दोहराता हूं, ताकि मैं एक अन्य स्तंभ से तुलना करने के लिए एक CHECK बाधा का उपयोग कर सकूं। इस तकनीक का एक और उदाहरण मेरा ब्लॉग पोस्ट है

आप अलग-अलग पंक्तियों में या अलग-अलग तालिकाओं में स्तंभों की तुलना करने के लिए CHECK बाधाओं का उपयोग नहीं कर सकते, जब तक कि आप ऐसी कार्यक्षमता को स्केलर में न लपेटें UDFs द्वारा आह्वान किए गए CHECK बाधा के रूप में। क्या होगा यदि आपको वास्तव में एक व्यावसायिक नियम लागू करने के लिए अलग-अलग पंक्तियों या अलग-अलग तालिकाओं में स्तंभों की तुलना करने की आवश्यकता है? उदाहरण के लिए, मान लें कि आप एक डॉक्टर के काम के घंटे जानते हैं, और आप यह सुनिश्चित करना चाहते हैं कि सभी नियुक्तियां काम के घंटों के भीतर फिट हों? बेशक, आप इस व्यवसाय नियम को लागू करने के लिए एक ट्रिगर या एक संग्रहीत प्रक्रिया का उपयोग कर सकते हैं, लेकिन न तो एक ट्रिगर और न ही एक संग्रहीत प्रक्रिया आपको 100% गारंटी दे सकती है कि आपका सभी डेटा साफ है - कोई व्यक्ति आपके ट्रिगर को अक्षम या छोड़ सकता है, कुछ दर्ज करें गंदा डेटा, और अपने ट्रिगर को फिर से सक्षम या फिर से बनाएँ। इसके अलावा, कोई सीधे संग्रहीत प्रक्रियाओं को दरकिनार करके आपकी तालिका को संशोधित कर सकता है।

मुझे केवल FK और CHECK बाधाओं का उपयोग करके इस व्यवसाय नियम को कैसे लागू करना है - यह प्रदर्शित करने की गारंटी दूंगा कि सभी डेटा व्यवसाय नियम को संतुष्ट करते हैं जब तक कि सभी बाधाओं पर भरोसा नहीं किया जाता है।

फिर भी एक और उदाहरण यह लागू करने का एक तरीका है कि समय की अवधि में कोई अंतराल नहीं है और कोई ओवरलैप नहीं है


1
"मैं नियमित रूप से अवनति करता हूं ताकि मैं बाधाओं के साथ डेटा अखंडता को लागू कर सकूं।" मुझे भी। यह एक महान व्यापार-बंद है: आप थोड़ा सा वंचित करते हैं लेकिन डीआरआई प्राप्त करते हैं ।
निक चॉमास

@NickChammas - यह बहुत दिलचस्प है। जब आप ऐसी चीजें करते हैं तो क्या आप परिदृश्य साझा कर सकते हैं?
एके

1
निश्चित रूप से। हमारे पास एक पूर्ति प्रणाली है जिसमें पूरी की जाने वाली वस्तुओं की एक कतार शामिल है। Fulfillableप्रत्येक पूर्ण करने योग्य आइटम पर सभी विवरणों के साथ एक तालिका होती है , और फिर एक FulfillableQueueतालिका होती है जो SQL सर्वर में कतार को लागू करती है । एक निश्चित के साथ केवल Fulfillables StateIDकतार में हो सकता है। StateIDमें है Fulfillableमेज, लेकिन मैं इसे करने के लिए दोहराने FulfillableQueueऔर फिर से इस बाधा को लागू FOREIGN KEYऔर CHECKबाधाओं।
निक चामास
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.