मैंने वास्तव में एक साथ जवाब डालना शुरू कर दिया, लेकिन मैं जटिलताओं में भाग गया, क्योंकि आप (काफी समझदारी से) एक साधारण उदाहरण चाहते हैं। समस्या कई गुना है।
सबसे पहले मुझे आपके वास्तविक विशेषज्ञता के स्तर के संबंधपरक डेटाबेस और 5 एनएफ का अच्छा विचार नहीं है; मेरे पास लेने के लिए शुरुआती बिंदु नहीं है और फिर 6 एनएफ,
दूसरा, अन्य किसी भी एनएफ की तरह, यह भिन्नता है। आप बस इसमें मुश्किल से कदम उठा सकते हैं; आप प्रमाणन तालिकाओं के लिए 6 एनएफ लागू कर सकते हैं; आप प्रत्येक टेबल पर पूर्ण हॉग जा सकते हैं, आदि। निश्चित रूप से टेबल का विस्फोट होता है, लेकिन फिर आप इसे सामान्यीकृत करते हैं, और विस्फोट को मार देते हैं; यह 6 एनएफ का एक उन्नत या परिपक्व कार्यान्वयन है। जब आप सबसे सरल, सबसे सीधा-आगे उदाहरण मांग रहे हों, तो 6 एनएफ के पूर्ण या आंशिक स्तर प्रदान करने का कोई उपयोग नहीं।
मुझे विश्वास है कि आप समझते हैं कि कुछ टेबल "5 एनएफ में" हो सकते हैं जबकि अन्य "6 एनएफ में" हैं।
तो मैंने आपके लिए एक साथ रखा। लेकिन यहां तक कि स्पष्टीकरण की जरूरत है।
अब एसक्यूएल मुश्किल से 5 एनएफ का समर्थन करता है, यह 6 एनएफ का समर्थन नहीं करता है (मुझे लगता है कि डपोर्ट्स अलग-अलग शब्दों में एक ही बात कहता है)। अब मैं एक गहरे स्तर पर 6 एनएफ लागू करता हूं, प्रदर्शन कारणों से, सरलीकृत पिवोटिंग (पूरे टेबल का; कोई भी और सभी कॉलम, एमएस में मूर्खतापूर्ण पिवोट फ़ंक्शन नहीं), कॉलमर एक्सेस इत्यादि।इसके लिए आपको एक पूर्ण कैटलॉग की आवश्यकता है, जो एसक्यूएल कैटलॉग का विस्तार है, 6 एनएफ का समर्थन करने के लिए जो SQL समर्थन नहीं करता है, और डेटा इंटीग्रटी और बिजनेस नियम बनाए रखता है। इसलिए, आप वास्तव में मस्ती के लिए 6 एनएफ को लागू नहीं करना चाहते हैं, अगर आपको आवश्यकता है तो आप केवल ऐसा करते हैं, क्योंकि आपको एक कैटलॉग लागू करना है। (यह EAV भीड़ नहीं करते क्या है, और इस कारण है कि अधिकांश EAV सिस्टम डेटा अखंडता समस्याएं हैं। इनमें से ज्यादातर कथात्मक Referential & डेटा अखंडता का उपयोग नहीं करते एसक्यूएल है कि।)
लेकिन ज्यादातर लोगों को जो 6 एनएफ लागू करते हैं, पूर्ण सूची के साथ गहरे स्तर को लागू नहीं करते हैं। उनके पास सरल जरूरत है, और इस प्रकार 6 एनएफ के एक उथले स्तर को लागू करते हैं। तो, चलो, यह आपके लिए एक सरल उदाहरण प्रदान करने के लिए लेते हैं। चलिए एक साधारण उत्पाद तालिका से शुरू करते हैं जिसे 5 एनएफ में घोषित किया जाता है (और हम 5 एनएफ के बारे में बहस नहीं करते हैं)। कंपनी विभिन्न प्रकार के उत्पादों को बेचती है, आधे कॉलम अनिवार्य हैं, और दूसरा आधा वैकल्पिक है, जिसका अर्थ है कि, उत्पाद प्रकार के आधार पर, कुछ कॉलम शून्य हो सकते हैं। हालांकि उन्होंने डेटाबेस के साथ अच्छा काम किया हो सकता है, नल अब एक बड़ी समस्या है: कॉलम जो कि कुछ उत्पाद प्रकार के लिए शून्य नहीं होना चाहिए, क्योंकि घोषणा न्यूल कहती है, और उनका ऐप कोड केवल अगले व्यक्ति के जितना अच्छा है ।
तो वे उस समस्या को ठीक करने के लिए 6 एनएफ के साथ जाने का फैसला करते हैं, क्योंकि 6 एनएफ के उपशीर्षक में कहा गया है कि यह शून्य समस्या को समाप्त करता है। छठा सामान्य फॉर्म irreducible सामान्य फॉर्म है, इसके बाद कोई और एनएफ नहीं होगा, क्योंकि डेटा को सामान्यीकृत नहीं किया जा सकता है। पंक्तियों को अत्यंत डिग्री के लिए सामान्यीकृत किया गया है। 6 एनएफ की परिभाषा है:
एक तालिका 6 एनएफ में है जब पंक्ति में प्राथमिक कुंजी होती है, और अधिकतर, विशेषता।
ध्यान दें कि उस परिभाषा के अनुसार, ग्रह के लाखों टेबल पहले से ही 6 एनएफ में हैं, बिना इरादे के। उदाहरण के लिए। सामान्य संदर्भ या लुक-अप टेबल, केवल एक पीके और विवरण के साथ।
दाएं। खैर, हमारे दोस्त अपनी उत्पाद तालिका देखते हैं, जिसमें आठ गैर-महत्वपूर्ण विशेषताएं हैं, इसलिए यदि वे उत्पाद तालिका 6 एनएफ बनाते हैं, तो उनके पास आठ उप-उत्पाद तालिकाएं होंगी। फिर यह मुद्दा है कि कुछ कॉलम अन्य तालिकाओं के लिए विदेशी कुंजी हैं, और इससे अधिक जटिलताओं का कारण बनता है। और वे इस तथ्य को ध्यान में रखते हैं कि एसक्यूएल जो कुछ भी कर रहा है उसका समर्थन नहीं करता है, और उन्हें एक छोटी सूची बनाना है। आठ टेबल सही हैं, लेकिन समझदार नहीं हैं। उनका उद्देश्य नल से छुटकारा पाने के लिए था, प्रत्येक टेबल के चारों ओर एक छोटी सबसाइट लिखना नहीं था।
Simple 6NF Example
वाले पाठकों को मॉडलिंग रिलेशनल डाटाबेसों हेतु स्टैंडर्ड के साथ अपरिचित हैं IDEF1X Notation आदेश उदाहरण में प्रतीकों की व्याख्या करने में उपयोगी मिल सकता है।
तो आम तौर पर, उत्पाद तालिका सभी अनिवार्य कॉलम, विशेष रूप से एफके, और प्रत्येक वैकल्पिक स्तंभ, प्रत्येक नलबल कॉलम को एक अलग उप-उत्पाद तालिका में रखी जाती है। मैंने देखा है कि यह सबसे सरल रूप है। आठ की बजाय पांच टेबल। मॉडल में, चार उप-उत्पाद तालिकाएं "6 एनएफ में" हैं; मुख्य उत्पाद तालिका "5 एनएफ में" है।
अब हमें वास्तव में उत्पाद कोड से संबंधित प्रत्येक कोड सेगमेंट की आवश्यकता नहीं है, यह पता लगाने के लिए कि उत्पाद प्रकार, आदि के आधार पर इसे किस कॉलम का निर्माण करना चाहिए, ताकि हम एक दृश्य प्रदान कर सकें, जो अनिवार्य रूप से 5 एनएफ "दृश्य" प्रदान करता है उत्पाद तालिका क्लस्टर।
अगली चीज़ जो हमें चाहिए वह एसक्यूएल कैटलॉग के विस्तार की बुनियादी रुचियां है, ताकि हम सुनिश्चित कर सकें कि विभिन्न उत्पाद प्रकारों के लिए नियम (डेटा अखंडता) एक ही स्थान पर, डेटाबेस में बनाए रखा गया है, और निर्भर नहीं है ऐप कोड पर। सबसे सरल सूची आप से दूर हो सकते हैं। यह ProductType से प्रेरित है, इसलिए ProductType अब उस मेटाडेटा का हिस्सा बनता है। आप एक सूची के बिना उस सरल संरचना को लागू कर सकते हैं, लेकिन मैं इसकी अनुशंसा नहीं करता।
अद्यतन
यह ध्यान रखें कि मैं डेटाबेस में सभी व्यापार नियमों को लागू करने के लिए महत्वपूर्ण है। अन्यथा यह डेटाबेस नहीं है (आवेदन कोड में लागू नियमों की धारणा "चरम पर उल्लसित है, खासकर आजकल, जब हमारे पास फूलवाला" डेवलपर्स "के रूप में काम करते हैं)। इसलिए सभी नियम, आदि सबसे पहले और सबसे पहले एसक्यूएल घोषणाओं, जांच बाधाओं, कार्यों, आदि के रूप में कार्यान्वित किए जाते हैं जो सभी घोषणात्मक संदर्भित ईमानदारी, और घोषणात्मक डेटा ईमानदारी को संरक्षित करता है। एसक्यूएल कैटलॉग का विस्तार उस क्षेत्र को कवर करता है जिसमें SQL के पास घोषणा नहीं है, और फिर उन्हें SQL के रूप में कार्यान्वित किया जाता है। एक अच्छा डेटा शब्दकोश होने के नाते, यह बहुत कुछ करता है। उदाहरण के लिए। जब भी मैं टेबल बदलता हूं या कॉलम या उनकी विशेषताओं को बदलता या बदलता हूं, तो मैं दृश्यों को नहीं लिखता, वे सीधे कोड जनरेटर का उपयोग करके कैटलॉग + एक्सटेंशन से बनाए जाते हैं।
एक और बहुत महत्वपूर्ण नोट। 5 एनएफ तक पूर्ण और वफादार सामान्यीकरण अभ्यास पूरा किए बिना, आप 6 एनएफ (या उस मामले के लिए ईएवी ठीक से लागू नहीं कर सकते)। मुझे हर साइट पर जो समस्या दिखाई देती है, उनके पास वास्तविक 5 एनएफ राज्य नहीं है, उनके पास आंशिक सामान्यीकरण का कोई मिश-मैश है या कोई सामान्यीकरण नहीं है, लेकिन वे उससे बहुत जुड़े हुए हैं। उस से 6 एनएफ या ईएवी बनाना एक आपदा है। घोषणात्मक एसक्यूएल में लागू सभी व्यावसायिक नियमों के बिना उस से ईएवी या 6 एनएफ बनाना, परमाणु आपदा है, जो वर्षों से जल रहा है। आप जिसके लिए भुगतान करते हैं वह आपको प्राप्त होता है।
अंतिम अद्यतन।
अंत में, हां, सामान्यीकरण के कम से कम चार और स्तर हैं (सामान्यीकरण एक सिद्धांत है, न केवल सामान्य रूप का संदर्भ है), जिसे उस साधारण 6 एनएफ उत्पाद क्लस्टर पर लागू किया जा सकता है, जो अधिक नियंत्रण, कम टेबल प्रदान करता है , आदि। जितना गहरा हम जाते हैं, कैटलॉग जितना व्यापक होगा। और प्रदर्शन के उच्च स्तर। जब आप तैयार हों, तो बस पूछें, मैंने पहले से ही मॉडल बनाए हैं और अन्य उत्तरों में विवरण पोस्ट किए हैं।
"6 एनएफ का अर्थ है कि प्रत्येक संबंध में उम्मीदवार कुंजी होती है और एक से अधिक अन्य (गैर-कुंजी) विशेषता नहीं होती है।" क्या आप मुझे इस परिभाषा का संदर्भ दे सकते हैं? – shababhsiddique
चेकआउट "रिलेशनल डेटाबेस डिज़ाइन और कार्यान्वयन: जन हैरिंगटन, तीसरा संस्करण, पृष्ठ संख्या .125"। (* परिणाम सारणी है जो किसी और को विघटित नहीं किया जा सकता है; ज्यादातर मामलों में, तालिकाओं में प्राथमिक कुंजी और एकल गैर शामिल है -की विशेषता। *) – Shinchan