資料庫管理系統(DBMS)中BCNF的解釋及示例
BCNF (Boyce-Codd正規化)是3NF的進階版本。如果每個函式依賴X->Y中,X都是表中的超鍵,則該表處於BCNF。對於BCNF,表應處於3NF,並且對於每個FD,LHS都是超鍵。
示例
考慮一個具有屬性(學生, 科目, 教師)的關係R。
學生 | 教師 | 科目 |
---|---|---|
Jhansi | P.Naresh | 資料庫 |
jhansi | K.Das | C |
subbu | P.Naresh | 資料庫 |
subbu | R.Prasad | C |
F: { (student, Teacher) -> subject (student, subject) -> Teacher Teacher -> subject}
候選鍵是(學生, 教師)和(學生, 科目)。
上述關係處於3NF(因為沒有傳遞依賴)。如果對於每個非平凡的FD X->Y,X必須是一個鍵,則關係R處於BCNF。
上述關係不處於BCNF,因為在FD (教師->科目)中,教師不是鍵。此關係存在異常:
例如,如果我們嘗試刪除學生Subbu,我們將丟失R. Prasad教授C的資訊。這些困難是由教師是決定因素但不是候選鍵這一事實造成的。
BCNF分解
教師->科目違反了BCNF(因為教師不是候選鍵)。
如果X->Y違反BCNF,則將R分成R1(X, Y)和R2(R-Y)。
因此,R被分成兩個關係R1(教師, 科目)和R2(學生, 教師)。
R1
教師 | 科目 |
---|---|
P.Naresh | 資料庫 |
K.DAS | C |
R.Prasad | C |
R2
學生 | 教師 |
---|---|
Jhansi | P.Naresh |
Jhansi | K.Das |
Subbu | P.Naresh |
Subbu | R.Prasad |
R中存在的所有異常,現在在上述兩個關係中都被消除了。
注意
BCNF分解並不總是滿足依賴保持屬性。BCNF分解後,如果依賴關係未保持,則必須決定是保持BCNF還是回滾到3NF。此回滾過程稱為反規範化。
廣告