DBMS में BCNF
BCNF क्या है
BCNF (Boyce-Codd Normal Form) 3NF का ज़्यादा सख़्त रूप है। यह एक छोटी खाई बंद करता है जो 3NF overlapping candidate keys वाली tables में छोड़ सकता है। अगर table BCNF में है, यह एक ख़ास तरह की dependency-based redundancy से मुक्त होने की गारंटी है।
BCNF नियम
Table BCNF में है अगर, हर functional dependency A -> B को, determinant A एक super key हो (यह row को विशिष्ट पहचान सके)। अगर कोई determinant super key न हो, table BCNF में नहीं है और decompose करनी चाहिए।
BCNF बनाम 3NF
| बात | 3NF | BCNF |
|---|---|---|
| Determinant नियम | Super key या dependent candidate key का हिस्सा | Determinant super key होना चाहिए |
| सख़्ती | कम सख़्त | ज़्यादा सख़्त |
| हर BCNF 3NF है? | — | हाँ |
| हर 3NF BCNF है? | हमेशा नहीं | — |
जब 3NF काफ़ी नहीं
एक table सोचिए जहाँ student subjects लेता है, हर एक एक teacher पढ़ाता है, और हर teacher एक subject पढ़ाता है:
(student, subject) -> teacher teacher -> subject
यहाँ teacher -> subject का determinant (teacher) super key नहीं है। Table 3NF में हो सकती है पर फिर भी redundant subject-teacher तथ्य store करती है। यह BCNF में नहीं है।
BCNF में ठीक करना
Decompose कीजिए ताकि हर determinant super key बन जाए:
teaches(teacher PK, subject) takes(student, teacher)
अब teacher -> subject ऐसी table में है जहाँ teacher key है, और student-teacher link अलग है। हर dependency को अब super-key determinant है — design BCNF में है।
BCNF कब इस्तेमाल करें
- 3NF इस्तेमाल कीजिए ज़्यादातर रोज़ के databases को — यह आमतौर पर काफ़ी है।
- BCNF इस्तेमाल कीजिए जब overlapping candidate keys 3NF के बाद भी redundancy कराएँ।
- Trade-off का ध्यान — BCNF को queries में अतिरिक्त joins चाहिए हो सकते हैं।
BCNF आख़िरी बची dependency redundancy हटाने के बारे में है, ज़्यादा tables की कीमत पर।
आम गलतियाँ
- यह सोचना 3NF हमेशा BCNF के बराबर है। 3NF table अब भी BCNF तोड़ सकती है।
- Overlapping candidate keys अनदेखा करना। वहीं BCNF मायने रखता है।
- Over-decomposing। अतिरिक्त tables joins जोड़ सकती हैं; ज़रूरत तक ही normalize कीजिए।
- यह भूलना BCNF 3NF का मतलब है। BCNF तक पहुँचना मतलब आप पहले से 3NF पूरा करते हैं।
सारांश
- BCNF 3NF का ज़्यादा सख़्त रूप है।
- नियम: हर A -> B को, A super key होना चाहिए।
- 3NF overlapping candidate keys के साथ redundancy छोड़ सकता है; BCNF हटाता है।
- हर BCNF table 3NF में है, पर उल्टा नहीं।
- ज़्यादातर मामलों को 3NF; वो redundancy बचे तब BCNF इस्तेमाल कीजिए।
आगे, पिछले forms दोहराइए normalization में, या theory functional dependency में।
