मुझे लगता है कि हम सभी डेटाबेस सामान्यीकरण से परिचित हैं ।
मेरा सवाल यह है: जब आप टेबलों को असामान्य बनाना चाहते हैं, तो आप कौन से दिशानिर्देशों का उपयोग करते हैं?
मुझे लगता है कि हम सभी डेटाबेस सामान्यीकरण से परिचित हैं ।
मेरा सवाल यह है: जब आप टेबलों को असामान्य बनाना चाहते हैं, तो आप कौन से दिशानिर्देशों का उपयोग करते हैं?
जवाबों:
जब ओएलएपी ऑपरेशन हो तो इसे सामान्य करें, जब ओएलटीपी हो (सेक्शन डीमोर्नाइजेशन से जुड़े लेख से) सामान्य करें
ऑनलाइन लेनदेन प्रसंस्करण (ओएलटीपी) के लिए इच्छित डेटाबेस आमतौर पर ऑनलाइन विश्लेषणात्मक प्रसंस्करण (ओएलएपी) के लिए इच्छित डेटाबेस की तुलना में अधिक सामान्यीकृत होते हैं। ओएलटीपी एप्लिकेशन को छोटे लेनदेन की एक उच्च मात्रा की विशेषता है जैसे कि सुपरमार्केट चेकआउट काउंटर पर बिक्री रिकॉर्ड को अपडेट करना। उम्मीद यह है कि प्रत्येक लेनदेन डेटाबेस को सुसंगत स्थिति में छोड़ देगा। इसके विपरीत, OLAP संचालन के लिए अभिप्रेत डेटाबेस मुख्य रूप से "ज्यादातर पढ़ा" डेटाबेस हैं। OLAP एप्लिकेशन ऐतिहासिक डेटा निकालने के लिए होते हैं जो लंबे समय तक जमा हुए हैं। इस तरह के डेटाबेस के लिए, निरर्थक या "अस्वीकृत" डेटा व्यापार खुफिया अनुप्रयोगों को सुविधाजनक बना सकते हैं। विशेष रूप से, स्टार स्कीमा में आयामी तालिकाओं में अक्सर अपभ्रंश डेटा होते हैं। अशुद्ध या निरर्थक डेटा को निकालने, बदलने, लोड (ETL) प्रसंस्करण के दौरान सावधानीपूर्वक नियंत्रित किया जाना चाहिए, और उपयोगकर्ताओं को डेटा को देखने की अनुमति नहीं दी जानी चाहिए जब तक कि यह एक सुसंगत स्थिति में न हो। स्टार स्कीमा का सामान्यीकृत विकल्प स्नोफ्लेक स्कीमा है। कई मामलों में, कंप्यूटर और RDBMS सॉफ़्टवेयर के रूप में विकेंद्रीकरण की आवश्यकता कम हो गई है, लेकिन चूंकि हार्डवेयर और सॉफ़्टवेयर प्रदर्शन के साथ-साथ डेटा वॉल्यूम में आम तौर पर वृद्धि हुई है, इसलिए OLAP डेटाबेस अक्सर अभी भी सामान्यीकृत स्कीमा का उपयोग करते हैं।
कम्प्यूटरीकृत कैश-रजिस्टरों और मोबाइल उपकरणों के रूप में छोटे कंप्यूटरों पर प्रदर्शन को बेहतर बनाने के लिए भी अपसामान्यकरण का उपयोग किया जाता है, क्योंकि ये केवल लुक-अप के लिए डेटा का उपयोग कर सकते हैं (उदाहरण मूल्य लुकअप)। जब कोई RDBMS प्लेटफ़ॉर्म (जैसे पाम) के लिए मौजूद नहीं है, या डेटा में कोई बदलाव नहीं किया जाना है, तो स्विफ्ट प्रतिक्रिया महत्वपूर्ण है।
जब तक यह दर्द होता है, तब तक इसे सामान्य करें, तब तक इसे सामान्य करें जब तक यह काम न करे (यानी: प्रदर्शन स्वीकार्य हो जाता है) :)
नियंत्रित विकेंद्रीकरण को लागू करने का एक संभावित समझदार कारण यह है कि यह आपको डेटा के कुछ अखंडता अवरोधों को लागू करने में सक्षम बनाता है जो अन्यथा संभव नहीं होगा। अधिकांश SQL DBMS को मल्टी-टेबल बाधाओं के लिए बेहद सीमित समर्थन है। एसक्यूएल में कभी-कभी कुछ बाधाओं को लागू करने का एकमात्र प्रभावी तरीका यह सुनिश्चित करना है कि बाधा में शामिल विशेषताएँ सभी एक ही तालिका में मौजूद हैं - तब भी जब सामान्यीकरण यह तय करेगा कि वे अलग-अलग तालिकाओं में हैं।
नियंत्रित विकेंद्रीकरण का अर्थ है कि यह सुनिश्चित करने के लिए तंत्र लागू किया जाता है कि अनावश्यक डेटा के कारण विसंगतियां उत्पन्न नहीं हो सकती हैं। इन अतिरिक्त नियंत्रणों की लागत और असंगत डेटा के जोखिम पर विचार करने की आवश्यकता है, जब यह निर्धारित किया जाता है कि मूल्य-निर्धारण सार्थक है।
विकृति का एक अन्य सामान्य कारण भंडारण संरचनाओं में कुछ बदलाव की अनुमति देना या कुछ अन्य भौतिक अनुकूलन की अनुमति देना है जो DBMS अन्यथा अनुमति नहीं देगा। भौतिक डेटा स्वतंत्रता के सिद्धांत के अनुसार एक DBMS को डेटाबेस में डेटा के तार्किक प्रतिनिधित्व को अनावश्यक रूप से बदल दिए बिना आंतरिक भंडारण संरचनाओं को कॉन्फ़िगर करने का साधन होना चाहिए। दुर्भाग्य से कई DBMS किसी भी डेटाबेस स्कीमा के लिए उपलब्ध भौतिक कार्यान्वयन विकल्पों के बहुत ही प्रतिबंधक हैं। वे वांछित तार्किक मॉडल के केवल उप-इष्टतम कार्यान्वयन का समर्थन करके भौतिक डेटाबेस स्वतंत्रता से समझौता करते हैं।
यह स्पष्ट होना चाहिए, लेकिन यह अभी भी कहा जाना चाहिए: सभी मामलों में यह केवल भौतिक कार्यान्वयन सुविधाओं में परिवर्तन है जो प्रदर्शन को निर्धारित कर सकते हैं - आंतरिक डेटा संरचनाएं, फ़ाइलें, अनुक्रमण, हार्डवेयर और इसके आगे जैसी सुविधाएँ। सामान्यीकरण और विकृति का प्रदर्शन या भंडारण अनुकूलन के साथ कोई लेना-देना नहीं है।
यदि आप अक्सर गणना किए गए डेटा तक पहुँच प्राप्त कर रहे हैं, तो इस प्रश्न के उत्तर में सुझाव दिया गया है, तो इसे असामान्य करें । गणना किए गए डेटा को संग्रहीत करने और बनाए रखने की लागत अक्सर इसे ओवर-कंप्यूटिंग की लागत से कम होगी यदि आपकी लोड प्रोफ़ाइल भारी-भरकम है।
मैं नियमित रूप से अपभ्रंश करता हूं ताकि मैं बाधाओं के साथ डेटा अखंडता को लागू कर सकूं। इस साइट पर एक उदाहरण हाल ही में एक प्रश्न है - मैं किसी अन्य तालिका में एक कॉलम को दोहराता हूं, ताकि मैं एक अन्य स्तंभ से तुलना करने के लिए एक CHECK बाधा का उपयोग कर सकूं। इस तकनीक का एक और उदाहरण मेरा ब्लॉग पोस्ट है ।
आप अलग-अलग पंक्तियों में या अलग-अलग तालिकाओं में स्तंभों की तुलना करने के लिए CHECK बाधाओं का उपयोग नहीं कर सकते, जब तक कि आप ऐसी कार्यक्षमता को स्केलर में न लपेटें UDFs द्वारा आह्वान किए गए CHECK बाधा के रूप में। क्या होगा यदि आपको वास्तव में एक व्यावसायिक नियम लागू करने के लिए अलग-अलग पंक्तियों या अलग-अलग तालिकाओं में स्तंभों की तुलना करने की आवश्यकता है? उदाहरण के लिए, मान लें कि आप एक डॉक्टर के काम के घंटे जानते हैं, और आप यह सुनिश्चित करना चाहते हैं कि सभी नियुक्तियां काम के घंटों के भीतर फिट हों? बेशक, आप इस व्यवसाय नियम को लागू करने के लिए एक ट्रिगर या एक संग्रहीत प्रक्रिया का उपयोग कर सकते हैं, लेकिन न तो एक ट्रिगर और न ही एक संग्रहीत प्रक्रिया आपको 100% गारंटी दे सकती है कि आपका सभी डेटा साफ है - कोई व्यक्ति आपके ट्रिगर को अक्षम या छोड़ सकता है, कुछ दर्ज करें गंदा डेटा, और अपने ट्रिगर को फिर से सक्षम या फिर से बनाएँ। इसके अलावा, कोई सीधे संग्रहीत प्रक्रियाओं को दरकिनार करके आपकी तालिका को संशोधित कर सकता है।
मुझे केवल FK और CHECK बाधाओं का उपयोग करके इस व्यवसाय नियम को कैसे लागू करना है - यह प्रदर्शित करने की गारंटी दूंगा कि सभी डेटा व्यवसाय नियम को संतुष्ट करते हैं जब तक कि सभी बाधाओं पर भरोसा नहीं किया जाता है।
फिर भी एक और उदाहरण यह लागू करने का एक तरीका है कि समय की अवधि में कोई अंतराल नहीं है और कोई ओवरलैप नहीं है ।
Fulfillable
प्रत्येक पूर्ण करने योग्य आइटम पर सभी विवरणों के साथ एक तालिका होती है , और फिर एक FulfillableQueue
तालिका होती है जो SQL सर्वर में कतार को लागू करती है । एक निश्चित के साथ केवल Fulfillables StateID
कतार में हो सकता है। StateID
में है Fulfillable
मेज, लेकिन मैं इसे करने के लिए दोहराने FulfillableQueue
और फिर से इस बाधा को लागू FOREIGN KEY
और CHECK
बाधाओं।