BCNF और 3NF के बीच का अंतर
बीसीएनएफ परिभाषा का उपयोग करना
यदि और केवल यदि इसकी प्रत्येक निर्भरता X → Y के लिए, तो निम्न में से कम से कम एक स्थिति धारण की जाती है :
- X → Y एक तुच्छ कार्यात्मक निर्भरता (Y, X), या है
- स्कीमा आर के लिए X एक सुपर कुंजी है
और 3NF परिभाषा
यदि और केवल यदि, इसके प्रत्येक कार्यात्मक निर्भरता X → A के लिए, तो निम्न में से कम से कम एक स्थिति रखती है:
- X में A (यानी X → A तुच्छ कार्यात्मक निर्भरता है), या है
- एक्स एक सुपरकी है, या
- AX का प्रत्येक तत्व, A और X के बीच का अंतर, एक प्रमुख विशेषता है (यानी, AX में प्रत्येक विशेषता कुछ उम्मीदवार कुंजी में निहित है)
हम निम्नलिखित अंतर को सरल शब्दों में देखते हैं:
- BCNF में : प्रत्येक आंशिक कुंजी (प्राइम विशेषता) केवल एक सुपरकी पर निर्भर कर सकती है,
जहाँ तक
- 3NF में : एक आंशिक कुंजी (प्राइम विशेषता) एक विशेषता पर भी निर्भर कर सकती है जो एक सुपरकी (कोई अन्य आंशिक कुंजी / प्राइम विशेषता या यहां तक कि गैर-प्राइम विशेषता) नहीं है।
कहाँ पे
- एक प्रमुख विशेषता एक उम्मीदवार कुंजी में पाया जाने वाला एक विशेषता है, और
- एक उम्मीदवार कुंजी उस संबंध के लिए एक न्यूनतम सुपरकी है, और
- एक superkey एक रिश्ता चर की विशेषताओं का एक सेट है जिसके लिए यह मानती है कि उस चर करने के लिए आवंटित सभी संबंधों में, वहाँ कोई दो अलग tuples (पंक्तियाँ) इस set.Equivalently एक superkey में विशेषताओं के लिए एक ही मान होती है भी कर सकते हैं एक संबंध स्कीमा की विशेषताओं के एक सेट के रूप में परिभाषित किया जाना चाहिए, जिस पर स्कीमा की सभी विशेषताएं कार्यात्मक रूप से निर्भर हैं। (एक सुपरकी में हमेशा एक उम्मीदवार कुंजी होती है / एक उम्मीदवार कुंजी हमेशा एक सुपरकीट का सबसेट होती है। आप सुपरकी में से किसी एक को प्राप्त करने के संबंध में कोई भी विशेषता जोड़ सकते हैं।)
अर्थात्, उम्मीदवार कुंजी का कोई भी आंशिक उपसमूह (पूर्ण सेट को छोड़कर कोई भी गैर तुच्छ उपसमुच्चय) सुपरकी के अलावा किसी अन्य चीज़ पर कार्यात्मक रूप से निर्भर नहीं हो सकता है।
BCNF में नहीं तालिका / संबंध विसंगतियों के अधीन है जैसे कि किसी अन्य उपयोगकर्ता द्वारा पिज्जा उदाहरण में उल्लिखित अद्यतन विसंगतियां। दुर्भाग्य से,
- BNCF हमेशा प्राप्त नहीं किया जा सकता है , जबकि
- 3NF हमेशा प्राप्त किया जा सकता है ।
3NF बनाम बीसीएनएफ उदाहरण
अंतर का एक उदाहरण वर्तमान में विकिपीडिया पर " 3NF टेबल बीसीएनएफ (बॉयस-कॉड सामान्य रूप) से न मिलना " पर पाया जा सकता है , जहां निम्न तालिका 3 एनएफ से मिलती है, लेकिन बीसीएनएफ से नहीं क्योंकि "टेनिस कोर्ट" (एक आंशिक कुंजी / प्रमुख विशेषता) निर्भर करती है। "दर प्रकार" (एक आंशिक कुंजी / प्राइम विशेषता जो एक सुपरकी नहीं है) पर, जो एक निर्भरता है जिसे हम डेटाबेस के ग्राहकों, टेनिस क्लब से पूछकर निर्धारित कर सकते हैं:
आज की टेनिस कोर्ट बुकिंग ( 3NF, BCNF नहीं )
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
3NF समस्या : आंशिक कुंजी / प्रमुख विशेषता "कोर्ट" एक सुपरकी के अलावा किसी अन्य चीज पर निर्भर है। इसके बजाय, यह आंशिक कुंजी / प्रधान विशेषता "दर प्रकार" पर निर्भर है। इसका मतलब यह है कि अगर हम दरबार को अपग्रेड करना चाहते हैं या दर में बदलाव करना चाहते हैं, तो उपयोगकर्ता को मैन्युअल रूप से दर प्रकार बदलना होगा।
- लेकिन क्या होगा अगर उपयोगकर्ता अदालत को अपग्रेड करता है, लेकिन दर को बढ़ाने के लिए याद नहीं करता है? या क्या होगा अगर गलत दर टाइप कोर्ट में आवेदन किया जाए?
(तकनीकी शब्दों में, हम गारंटी नहीं दे सकते कि "दर प्रकार" -> "न्यायालय" कार्यात्मक निर्भरता का उल्लंघन नहीं किया जाएगा)।
BCNF समाधान : यदि हम उपरोक्त तालिका को BCNF में रखना चाहते हैं, तो हम दिए गए संबंध / तालिका को निम्नलिखित दो संबंधों / तालिकाओं में विघटित कर सकते हैं (यह मानते हुए कि दर प्रकार केवल न्यायालय और सदस्यता की स्थिति पर निर्भर है, जिसे हम कर सकते हैं हमारे डेटाबेस के ग्राहकों से पूछकर खोज करें, टेनिस क्लब के मालिक):
दर प्रकार ( BCNF और कमजोर 3NF, जो BCNF द्वारा निहित है)
Rate Type Court Member Flag
--------- ----- -----------
SAVER 1 Yes
STANDARD 1 No
PREMIUM-A 2 Yes
PREMIUM-B 2 No
आज की टेनिस कोर्ट बुकिंग ( BCNF और कमजोर 3NF, जो BCNF द्वारा निहित है)
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
समस्या सुलझ गयी : अब अगर हम अदालत को अपग्रेड करते हैं तो हम गारंटी दे सकते हैं कि दर प्रकार इस बदलाव को दर्शाएगा, और हम अदालत के लिए गलत कीमत नहीं वसूल सकते।
(तकनीकी शब्दों में, हम गारंटी दे सकते हैं कि कार्यात्मक निर्भरता "दर प्रकार" -> "न्यायालय" का उल्लंघन नहीं किया जाएगा)