Boyce-Codd Normal Form (BCNF)
BCNF ၏ စည်းမျဉ်းများ
Section titled “BCNF ၏ စည်းမျဉ်းများ”Table တစ်ခုဟာ BCNF အဆင့်ကို ရောက်ဖို့ဆိုရင်:
- 3NF အဆင့်မှာ ရှိပြီးသား ဖြစ်ရမယ်။
- Determinant တိုင်းဟာ Candidate Key ဖြစ်ရမယ်။ (အလွယ်ပြောရရင် Primary/Candidate Key ကလွဲပြီး တခြား ဘယ် Column ကမှ အဆုံးအဖြတ်ပေးနိုင်တဲ့ Determinant မဖြစ်ရပါဘူး။)
3NF မှာ “Non-Key က Non-Key ကို အဆုံးအဖြတ်ပေးတာ မရှိရဘူး” လို့ပဲ ပြောထားတာပါ။ ဒါပေမဲ့ “Non-Key က Primary Key ရဲ့ အစိတ်အပိုင်း တစ်ခုခုကို အဆုံးအဖြတ်ပေးနေရင်ကော?” ဆိုတဲ့ ဟာကွက်လေး ရှိနေပါသေးတယ်။ အဲဒါကို BCNF က ဖြေရှင်းပေးတာပါ။
BCNF လိုအပ်လာပုံ (ဥပမာ)
Section titled “BCNF လိုအပ်လာပုံ (ဥပမာ)”ကျောင်းသားတွေနဲ့ သူတို့ရဲ့ အကြံပေးဆရာ (Advisors) တွေကို မှတ်ထားတဲ့ Table တစ်ခုကို ကြည့်ရအောင်။
စည်းမျဉ်းများ (Business Rules):
- ကျောင်းသားတစ်ယောက်ဟာ ဘာသာရပ်တစ်ခု (Subject) ကို ဆရာတစ်ယောက် (Advisor) ဆီမှာပဲ သင်ယူခွင့် ရှိပါတယ်။
- ဆရာတစ်ယောက်ဟာ ဘာသာရပ်တစ်ခုတည်းကိုပဲ ကျွမ်းကျင်စွာ သင်ပေးနိုင်ပါတယ်။
- ဒါပေမဲ့ ဘာသာရပ်တစ်ခုကို သင်ပေးနိုင်တဲ့ ဆရာ အများကြီး ရှိနိုင်ပါတယ်။
ဒီ Table မှာ:
- Primary Key က
(Student, Subject)နှစ်ခု ပေါင်းထားတဲ့ Composite Key ပါ။ - Non-Key Column က
Advisorဖြစ်ပါတယ်။ - 3NF စည်းမျဉ်းအရ Non-Key (
Advisor) တွေ အချင်းချင်း မှီခိုနေတာ မရှိတဲ့အတွက် ဒီ Table ဟာ 3NF အဆင့် ရောက်နေပါပြီ။
ဒါပေမဲ့ ပြဿနာ ရှိနေပါသေးတယ်:
စည်းမျဉ်းအရ ဆရာတစ်ယောက်ဟာ ဘာသာရပ်တစ်ခုတည်းကိုပဲ သင်ပေးတာပါ။ ဒါကြောင့် Advisor (ဆရာနာမည်) ကို သိတာနဲ့ Subject (ဘာသာရပ်) ကို တန်းသိနိုင်ပါတယ်။ (Advisor -> Subject).
ဒီနေရာမှာ Advisor ဟာ Non-Key ဖြစ်နေလျက်နဲ့၊ Primary Key ရဲ့ အစိတ်အပိုင်းဖြစ်တဲ့ Subject ကို အဆုံးအဖြတ်ပေးနေတဲ့ Determinant ဖြစ်နေပါတယ်။ ဒါဟာ BCNF ရဲ့ စည်းမျဉ်းကို ချိုးဖောက်နေတာပါ။
3NF မှ BCNF သို့ ပြောင်းလဲခြင်း
Section titled “3NF မှ BCNF သို့ ပြောင်းလဲခြင်း”ဒီပြဿနာကို ဖြေရှင်းဖို့ BCNF စည်းမျဉ်းအရ အဲဒီ Determinant ဖြစ်နေတဲ့ Column နဲ့ သူအဆုံးအဖြတ်ပေးနေတဲ့ Column တွေကို သီးသန့် Table တစ်ခုအနေနဲ့ ခွဲထုတ် ပေးရပါမယ်။
| Student_Advisor Table (BCNF) | Advisor_Subject Table (BCNF) |
|---|---|
| ကျောင်းသားနဲ့ ဆရာ | ဆရာနဲ့ ဘာသာရပ် |
အခုဆိုရင်:
Advisor_SubjectTable မှာAdvisorက Primary Key ဖြစ်သွားပြီးSubjectကို အဆုံးအဖြတ်ပေးပါတယ်။Student_AdvisorTable မှာ(Student, Advisor)ကို Composite Key အဖြစ် သုံးထားပါတယ်။
ဒီလို ခွဲထုတ်လိုက်တဲ့အတွက် Update လုပ်တဲ့အခါ Data တွေ လွဲချော်နိုင်တဲ့ (Anomalies) ပြဿနာတွေကို အပြည့်အဝ ဖြေရှင်းနိုင်သွားပါပြီ။