2011-01-28 21 views
34

के साथ 6 एनएफ को समझना चाहते हैं मैंने अभी @ प्रदर्शन डीबीए के तर्कों को पढ़ा है: 6 एनएफ और ई-ए-वी। मैं बेचैन हूँ। मैं पहले 6 एनएफ पर संदेह कर रहा था क्योंकि इसे टेबल पर कुछ टाइमस्टैम्प कॉलम चिपकाकर "केवल" के रूप में प्रस्तुत किया गया था।एक उदाहरण

मैंने हमेशा डेटा डिक्शनरी के साथ काम किया है और एक का उपयोग करने के लिए या एसक्यूएल कोड जेनरेट करने के लिए आश्वस्त होने की आवश्यकता नहीं है। इसलिए मुझे एक ऐसे उत्तर की उम्मीद है जिसके लिए एक शब्दकोष (या कैटलॉग) की आवश्यकता होगी जिसका उपयोग कोड उत्पन्न करने के लिए किया जाता है।

तो मैं जानना चाहता हूं कि कैसे 6NF अत्यंत सरल उदाहरण से निपटेंगे। वस्तुओं, विवरण और कीमतों की एक तालिका। समय के साथ कीमतें बदलती हैं।

तो वैसे भी, आइटम तालिका 6NF में परिवर्तित होने पर कैसी दिखती है? "टेबल के विस्फोट" क्या है? यह यहाँ होता है?

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

उत्तर

27

संक्षेप में, 6 एनएफ का अर्थ है कि प्रत्येक संबंध में एक उम्मीदवार कुंजी और एक से अधिक (कुंजी या गैर-कुंजी) विशेषता नहीं होती है। अपने उदाहरण का समय लग करने के लिए, यदि एक "आइटम" और कोई ProductCode द्वारा पहचाना जाता है अन्य विशेषताओं विवरण और मूल्य हैं तो एक 6NF स्कीमा दो संबंधों को मिलाकर होगा (* प्रत्येक में महत्वपूर्ण नाम हैं):

ItemDesc {ProductCode*, Description} 
ItemPrice {ProductCode*, Price} 

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

तो 6 एनएफ पर विचार करने के लिए आपको वजन करना होगा कि कौन सी निर्भरता और अखंडता नियम आपके लिए महत्वपूर्ण हैं। कई मामलों में आप इसे 5 एनएफ तक चिपकाने के लिए और अधिक व्यावहारिक और उपयोगी पा सकते हैं और उससे आगे सामान्य नहीं कर सकते हैं।

+5

"6 एनएफ का अर्थ है कि प्रत्येक संबंध में उम्मीदवार कुंजी होती है और एक से अधिक अन्य (गैर-कुंजी) विशेषता नहीं होती है।" क्या आप मुझे इस परिभाषा का संदर्भ दे सकते हैं? – shababhsiddique

+4

चेकआउट "रिलेशनल डेटाबेस डिज़ाइन और कार्यान्वयन: जन हैरिंगटन, तीसरा संस्करण, पृष्ठ संख्या .125"। (* परिणाम सारणी है जो किसी और को विघटित नहीं किया जा सकता है; ज्यादातर मामलों में, तालिकाओं में प्राथमिक कुंजी और एकल गैर शामिल है -की विशेषता। *) – Shinchan

32

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

सबसे पहले मुझे आपके वास्तविक विशेषज्ञता के स्तर के संबंधपरक डेटाबेस और 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 एनएफ उत्पाद क्लस्टर पर लागू किया जा सकता है, जो अधिक नियंत्रण, कम टेबल प्रदान करता है , आदि। जितना गहरा हम जाते हैं, कैटलॉग जितना व्यापक होगा। और प्रदर्शन के उच्च स्तर। जब आप तैयार हों, तो बस पूछें, मैंने पहले से ही मॉडल बनाए हैं और अन्य उत्तरों में विवरण पोस्ट किए हैं।

+0

विवरण के लिए धन्यवाद। –

+1

@ केन। मेरा सौभाग्य। जब आप 6 एनएफ के गहरे स्तर के लिए तैयार होते हैं, तो बस पूछें, या मेरे अन्य उत्तरों को पढ़ें। यदि आपको पता नहीं है, तो आप एक उत्तर को अन-टिक कर सकते हैं और एक और जवाब देख सकते हैं। – PerformanceDBA

+2

"ध्यान दें कि उस परिभाषा के अनुसार, ग्रह के लाखों टेबल पहले से ही 6 एनएफ में हैं, बिना इरादे के।" अच्छा बिंदु उदा। सभी "सभी-कुंजी" टेबल 6 एनएफ में हैं। – onedaywhen

6

मैं पहले 6NF संदेह की दृष्टि से किया गया था के रूप में यह रूप में "केवल" टेबल पर कुछ टाइमस्टैम्प कॉलम चिपके हुए पेश किया गया।

मुझे पूरा यकीन नहीं है कि यह स्पष्ट गलतफहमी कहां से आती है। शायद यह तथ्य कि दिनांक, डार्विन और लोरेंटेजोस द्वारा "टेम्पोरल डेटा एंड द रिलेशनल मोड" पुस्तक के लिए 6 एनएफ पेश किया गया था? वैसे भी, मुझे आशा है कि यहां अन्य उत्तरों ने स्पष्ट किया है कि 6 एनएफ अस्थायी डेटाबेस तक ही सीमित नहीं है।

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

Chris Date: "व्यावहारिक उद्देश्यों के लिए, 5 एनएफ (और 6 एनएफ) तक चिपके रहें।"

Hugh Darwen:" तिथि [! नहीं व्यक्ति] के आसपास 6NF अपघटन overkill होगा ... फुटबॉल क्लब के लिए एक इष्टतम डिजाइन है ... 5 और एक-बिट-एनएफ "

!

Hugh Darwen: तब फिर से "हम 5NF में नहीं बल्कि 6NF में हैं, और फिर 5NF पर्याप्त है" (कई समान उदाहरण)

, मैं भी विपरीत करने के लिए सबूत पा सकते हैं:।

Chris Date: "डार्वेन और मैंने दोनों को कुछ समय के लिए महसूस किया है कि सभी बेस रिवर्स 6 एनएफ में होना चाहिए "

एक व्यावहारिक नोट पर, मैंने हाल ही में एक मामूली सुविधा जोड़ने के लिए हमारे उत्पादों में से एक के एसक्यूएल स्कीमा को बढ़ाया है। मैंने निरर्थक कॉलम से बचने के लिए 6 एनएफ अपनाया और छः नई टेबलों के साथ समाप्त हुआ जहां मेरे सहयोगियों के अधिकांश (सभी?) ने एक टेबल (या शायद मौजूदा तालिका को विस्तारित किया) को शून्य कॉलम के साथ इस्तेमाल किया होगा। बावजूद मुझे कई 'सहायक' संग्रहीत procs और एक INSTEAD OF चलाता के साथ एक 'denormalized' VIEW साबित, हर सांकेतिक शब्दों में बदलनेवाला कि पड़ा है एसक्यूएल स्तर पर इस सुविधा के साथ काम करने के लिए अपने रास्ते से हट गया है मुझे शाप को :)

+0

1) यह प्रश्न का उत्तर नहीं देता है 2) इस तरह के उद्धरण संदर्भ से बाहर किए गए हैं (किसी को भी पृष्ठ को पढ़ने की आवश्यकता है, यदि अध्याय नहीं है) का उपयोग कुछ भी साबित करने के लिए किया जा सकता है, जिसमें आप समर्थन करने की कोशिश कर रहे हैं। इसलिए उन्हें गंभीरता से नहीं लिया जा सकता 3) आप अधिक अप-मार्केट सहयोगियों के लिए तैयार हैं। – PerformanceDBA

+1

@PerformanceDBA: 1) सुनिश्चित करें कि यह करता है: विशेष रूप से वह हिस्सा जो कहता है, "इस बिंदु को प्राप्त करने के लिए आवश्यक चीज़ों को जोड़ने के लिए स्वतंत्र महसूस करें"। मुझे यह सबसे दिलचस्प लगता है कि 6 एनएफ के मुख्य समर्थकों का अर्थ है कि "5 एनएफ अक्सर काफी अच्छा होता है।" 2) सहमत हैं, पूरी तरह से पढ़ें! 3) "आप अधिक बाजार के सहकर्मियों के लिए तैयार हैं" - मैं flattered हूँ :) लेकिन कहां मिलना है ...? साइट का उल्लेख करने के लिए – onedaywhen

3

इन दोस्तों ने इसे नीचे किया है: Anchor Modeling। व्यावहारिक उदाहरणों के साथ संयुक्त विषय पर महान अकादमिक पत्र। आने वाले प्रोजेक्ट पर 6nf में DW बनाने पर विचार करने के लिए उनके लेखों ने मुझे किनारे पर धक्का दिया है। POC मैंने जो काम किया है, वह मान्य है (मेरे लिए, कम से कम) कि 6 एनएफ के भारी लाभ लागत से अधिक नहीं हैं।

+0

+1। मैंने पहले अपनी सामग्री के माध्यम से पढ़ा था। मुझे यकीन नहीं है कि मैं उनके आधार/दर्शन से सहमत हूं लेकिन यह अच्छी तरह से सोचा जाता है और विचार के लिए भोजन देता है। –

संबंधित मुद्दे