database - साधारण शब्दों में 3 एनएफ और बीसीएनएफ के बीच अंतर(8 वर्षीय को समझाने में सक्षम होना चाहिए)




relational-database database-normalization (4)

बीसीएनएफ और 3 एनएफ के बीच का अंतर

बीसीएनएफ परिभाषा का उपयोग करना

यदि और केवल अगर इसकी निर्भरता एक्स → वाई में से प्रत्येक के लिए, निम्न स्थितियों में से कम से कम एक शर्त है :

  • एक्स → वाई एक मामूली कार्यात्मक निर्भरता (वाई ⊆ एक्स) है, और
  • एक्स स्कीमा आर के लिए एक सुपर कुंजी है

और 3 एनएफ परिभाषा

यदि और केवल अगर, इसकी प्रत्येक कार्यात्मक निर्भरता X → ए के लिए, निम्न स्थितियों में से कम से कम एक निम्न स्थित है:

  • एक्स में ए है (यानी, एक्स → ए छोटी कार्यात्मक निर्भरता है), या
  • एक्स एक सुपरकी है, या
  • एएक्स के प्रत्येक तत्व, ए और एक्स के बीच सेट अंतर एक प्रमुख विशेषता है (यानी, एएक्स में प्रत्येक विशेषता कुछ उम्मीदवार कुंजी में निहित है)

हम सरल शब्दों में निम्नलिखित अंतर देखते हैं:

  • बीसीएनएफ में : प्रत्येक आंशिक कुंजी (मुख्य विशेषता) केवल एक सुपरकी पर निर्भर हो सकती है,

जहाँ तक

  • 3 एनएफ में : आंशिक कुंजी (मुख्य विशेषता) एक विशेषता पर भी निर्भर हो सकती है जो एक सुपरकी नहीं है (यानी एक और आंशिक कुंजी / मुख्य विशेषता या यहां तक ​​कि एक गैर-प्रमुख विशेषता)।

कहा पे

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

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

बीसीएनएफ में नहीं एक तालिका / संबंध विसंगतियों के अधीन है जैसे कि किसी अन्य उपयोगकर्ता द्वारा पिज्जा उदाहरण में उल्लिखित अपडेट विसंगतियों। दुर्भाग्य से,

  • बीएनसीएफ हमेशा प्राप्त नहीं किया जा सकता है , जबकि
  • 3 एनएफ हमेशा प्राप्त किया जा सकता है

3 एनएफ बनाम बीसीएनएफ उदाहरण

अंतर का एक उदाहरण वर्तमान में विकिपीडिया पर बीसीएनएफ (बॉयस-कोड सामान्य फॉर्म) से मुलाकात नहीं करने वाली "3 एनएफ तालिका " में पाया जा सकता है, जहां निम्न तालिका 3 एनएफ से मिलती है लेकिन बीसीएनएफ नहीं है क्योंकि "टेनिस कोर्ट" (आंशिक कुंजी / मुख्य विशेषता) निर्भर करता है "रेट टाइप" (एक आंशिक कुंजी / प्राइम विशेषता जो कि एक सुपरकी नहीं है) पर, जो एक निर्भरता है जिसे हम डेटाबेस के क्लाइंट, टेनिस क्लब से पूछकर निर्धारित कर सकते हैं:

आज की टेनिस कोर्ट बुकिंग (3 एनएफ, बीसीएनएफ नहीं )

Court   Start Time  End Time    Rate Type
------- ----------  --------    ---------
1       09:30       10:30       SAVER
1       11:00       12:00       SAVER
1       14:00       15:30       STANDARD
2       10:00       11:30       PREMIUM-B
2       11:30       13:30       PREMIUM-B
2       15:00       16:30       PREMIUM-A

टेबल की सुपरकी हैं:

S1 = {Court, Start Time}
S2 = {Court, End Time}
S3 = {Rate Type, Start Time}
S4 = {Rate Type, End Time}
S5 = {Court, Start Time, End Time}
S6 = {Rate Type, Start Time, End Time}
S7 = {Court, Rate Type, Start Time}
S8 = {Court, Rate Type, End Time}
ST = {Court, Rate Type, Start Time, End Time}, the trivial superkey

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

  • लेकिन क्या होगा यदि उपयोगकर्ता अदालत को अपग्रेड करता है लेकिन दर में वृद्धि याद नहीं है? या क्या होगा यदि गलत दर प्रकार अदालत में लागू होता है?

(तकनीकी शर्तों में, हम गारंटी नहीं दे सकते कि "दर प्रकार" -> "न्यायालय" कार्यात्मक निर्भरता का उल्लंघन नहीं किया जाएगा।)

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

दर प्रकार ( बीसीएनएफ और कमजोर 3 एनएफ, जो बीसीएनएफ द्वारा निहित है)

Rate Type   Court   Member Flag
---------   -----   -----------
SAVER       1       Yes
STANDARD    1       No
PREMIUM-A   2       Yes
PREMIUM-B   2       No

आज की टेनिस कोर्ट बुकिंग ( बीसीएनएफ और कमजोर 3 एनएफ, जो बीसीएनएफ द्वारा निहित है)

Member Flag     Court     Start Time   End Time
-----------     -----     ----------   --------
Yes             1         09:30        10:30
Yes             1         11:00        12:00
No              1         14:00        15:30
No              2         10:00        11:30
No              2         11:30        13:30
Yes             2         15:00        16:30

समस्या हल हो गई : अब अगर हम अदालत को अपग्रेड करते हैं तो हम गारंटी दे सकते हैं कि रेट प्रकार इस बदलाव को प्रतिबिंबित करेगा, और हम अदालत के लिए गलत कीमत नहीं ले सकते हैं।

(तकनीकी शर्तों में, हम गारंटी दे सकते हैं कि कार्यात्मक निर्भरता "दर प्रकार" -> "न्यायालय" का उल्लंघन नहीं किया जाएगा।)

मैंने उद्धरण पढ़ा है: डेटा कुंजी [1 एनएफ], पूरी कुंजी [2 एनएफ] पर निर्भर करता है और कुंजी [3 एनएफ] के अलावा कुछ भी नहीं

हालांकि, मुझे 3.5 एनएफ या बीसीएनएफ को समझने में परेशानी हो रही है। यहां मैं समझता हूं:

  • बीसीएनएफ 3 एनएफ की तुलना में कठोर है
  • तालिका में किसी भी एफडी के बाईं तरफ एक सुपरकी (या कम से कम एक उम्मीदवार कुंजी) होना चाहिए

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

अगर अब तक मेरी समझ के बारे में कुछ भी अस्वस्थ है, तो कृपया मुझे सही करें और किसी भी मदद के लिए धन्यवाद।


' Smartnut007 ', ' बिल करविन ' और ' sqlvogel ' द्वारा उत्तर उत्कृष्ट हैं। फिर भी मुझे इसके लिए एक दिलचस्प परिप्रेक्ष्य डालने दें।

खैर, हमारे पास प्राइम और गैर-प्राइम कुंजी हैं।

जब हम इस बात पर ध्यान देते हैं कि कैसे गैर-प्राइम्स प्राइम्स पर निर्भर करते हैं, तो हम दो मामलों को देखते हैं:

गैर-प्राइम निर्भर हो सकते हैं या नहीं

  • निर्भर करते समय: हम देखते हैं कि उन्हें पूर्ण उम्मीदवार कुंजी पर निर्भर होना चाहिए। यह 2 एनएफ है
  • जब निर्भर नहीं है: कोई निर्भरता या पारस्परिक निर्भरता नहीं हो सकती है

    • यहां तक ​​कि पारस्परिक निर्भरता भी नहीं: सुनिश्चित नहीं है कि सामान्यीकरण सिद्धांत यह कैसे संबोधित करता है।
    • जब पारस्परिक रूप से निर्भर: यह अवांछित समझा जाता है। यह 3 एनएफ है

प्राइम्स के बीच निर्भरताओं के बारे में क्या?

अब आप देखते हैं, हम प्राइम के बीच निर्भरता संबंध को दूसरे या तीसरे एनएफ द्वारा संबोधित नहीं कर रहे हैं। ऐसी निर्भरता, यदि कोई हो, वांछनीय नहीं है और इस प्रकार हमारे पास इसका समाधान करने का एक नियम है। यह बीसीएनएफ है

यहां बिल करविन की पोस्ट से उदाहरण का जिक्र करते हुए, आप देखेंगे कि ' टॉपिंग ' और ' टॉपिंग टाइप ' दोनों प्रमुख कुंजी हैं और इसकी निर्भरता है। अगर वे निर्भरता के साथ गैर-प्राइम थे, तो 3 एनएफ में लात मारी होगी।

ध्यान दें:

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

उन्नत विषय: जेनेरिक बीसीएनएफ को 2 एनएफ और 3 एनएफ में मैपिंग

अब जब हम जानते हैं कि बीसीएनएफ किसी भी प्राइम / गैर-प्राइम एट्रिब्यूज़ के संदर्भ में एक सामान्य परिभाषा प्रदान करता है, तो देखते हैं कि बीसीएनएफ और 2/3 एनएफ कैसे संबंधित हैं।

सबसे पहले, बीसीएनएफ को (मामूली मामला के अलावा) की आवश्यकता होती है कि प्रत्येक कार्यात्मक निर्भरता X -> Y (एफडी) के लिए, एक्स सुपर-कुंजी होना चाहिए। यदि आप किसी भी एफडी पर विचार करते हैं, तो हमारे पास तीन मामले हैं - (1) एक्स और वाई दोनों गैर-प्राइम, (2) प्राइम और (3) एक्स प्राइम और वाई गैर-प्राइम दोनों, (गैरकानूनी) केस एक्स को छोड़कर -प्रिम और वाई प्राइम।

मामले के लिए (1), 3 एनएफ का ख्याल रखता है।

मामले के लिए (3), 2 एनएफ का ख्याल रखता है।

मामले के लिए (2), हम बीसीएनएफ का उपयोग पाते हैं


सभी अच्छे जवाब इसे सरल भाषा में रखने के लिए [बीसीएनएफ] कोई आंशिक कुंजी कुंजी पर निर्भर नहीं हो सकती है।

यानि उम्मीदवार कुंजी का कोई आंशिक सबसेट (यानी पूर्ण सेट को छोड़कर कोई गैर-तुच्छ सबसेट) कुछ उम्मीदवार कुंजी पर कार्यात्मक रूप से निर्भर हो सकता है।


सूक्ष्म अंतर यह है कि 3 एनएफ कुंजी और गैर-महत्वपूर्ण विशेषताओं (जिसे गैर-प्राइम विशेषताओं भी कहा जाता है) के बीच एक अंतर बनाता है जबकि बीसीएनएफ नहीं करता है।

Zaniolo की 3NF की परिभाषा का उपयोग करके यह सबसे अच्छा समझाया गया है, जो कोडड के बराबर है:

एक संबंध, आर, 3 एनएफ iff में है, प्रत्येक नॉनट्रिविअल एफडी (एक्स-> ए) के लिए आर द्वारा संतुष्ट निम्न शर्तों में से कम से कम एक सत्य है:

(ए) एक्स आर, या के लिए एक सुपरकी है

(बी) ए आर के लिए एक महत्वपूर्ण विशेषता है

बीसीएनएफ को (ए) की आवश्यकता होती है लेकिन (बी) का इलाज अपने विशेष मामले के रूप में नहीं करता है। दूसरे शब्दों में बीसीएनएफ की आवश्यकता है कि प्रत्येक नॉनट्रिविअल निर्धारक एक सुपरकी है, यहां तक ​​कि इसके आश्रित गुण एक कुंजी का हिस्सा बनते हैं।

एक संबंध, आर, बीसीएनएफ आईएफएफ में है, प्रत्येक नॉनट्रिविअल एफडी (एक्स-> ए) के लिए आर निम्नलिखित संतुष्ट है:

(ए) एक्स आर के लिए एक सुपरकी है

इसलिए बीसीएनएफ अधिक सख्त है।

अंतर इतना सूक्ष्म है कि अनौपचारिक रूप से 3 एनएफ के रूप में वर्णित कई लोग वास्तव में बीसीएनएफ हैं। उदाहरण के लिए, आपने यहां बताया है कि 3 एनएफ का अर्थ है "डेटा कुंजी [ओं] पर निर्भर करता है ... और कुंजी के अलावा कुछ भी नहीं है, लेकिन यह वास्तव में बीसीएनएफ का अनौपचारिक वर्णन है, न कि 3 एनएफ। 3 एनएफ को अधिक सटीक रूप से वर्णित किया जा सकता है क्योंकि " गैर-कुंजी डेटा कुंजी पर निर्भर करता है ... और चाबियों के अलावा कुछ भी नहीं"।

आपने यह भी कहा:

3 एनएफ उद्धरण स्पष्ट रूप से "कुंजी के अलावा कुछ नहीं" कहता है जिसका अर्थ है कि सभी गुण प्राथमिक कुंजी पर निर्भर करते हैं।

यह एक oversimplification है। 3 एनएफ और बीसीएनएफ और सभी सामान्य फॉर्म सभी उम्मीदवार कुंजी और / या सुपरकी से संबंधित हैं, केवल एक "प्राथमिक" कुंजी नहीं।





3nf