BCNF簡介
是由Boyce和Codd提出的,比3NF又進了一步,通常認為是修正的第三範式.所謂第三範式,定義是關係模式R<U,F>中若不存在這樣的鍵X,屬性組Y及非主屬性Z,使得X—>Y,Y—>Z成立,(不存在Y—>X),則稱R<U,F>為3NF.
即當2NF(第二範式)消除了非主屬性對鍵的傳遞函式依賴,則稱為3NF。
對3NF關係進行投影,將消除原關係中主屬性對鍵的部分與傳遞依賴,得到一組BCNF關係。
BCNF定義
關係模式R<U,F>∈1NF。若函式依賴集合F中的所有函式依賴X→Y(Y不包含於X)的左部都包含R的任一候選鍵,則R∈BCNF。換言之,BCNF中的所有依賴的左部都必須包含候選鍵。
具有函式依賴集F的關係模式R屬於BCNF的條件是,對所有F的閉包中形如
X->Y,則下面的兩個條件至少有一個成立:
1. X->Y是平凡的依賴。
2. X是R的一個超鍵。
滿足BCNF條件
1 所有非主屬性對每一個候選鍵都是完全函式依賴;
2 所有的主屬性對每一個不包含它的候選鍵,也是完全函式依賴;
3 沒有任何屬性完全函式依賴於非候選鍵的任何一組屬性。
BCNF舉例
由於R∈BCNF,按定義排除了任何屬性對鍵的傳遞依賴與部分依賴,所以R∈3NF。但是若R∈3NF,則R未必屬於BCNF。
例如:關係模式STJ(S,T,J)中,S表示學生,T表示教師,J表示課程。每一個教師只教一門課。每門課有 若干個教師,某一學生選定某門課,就對應一個固定的教師。由語義可得到如下函式依賴:
(S,J)->T;(S,T)->J;T->J。
(S,J),(S,T)都是候選鍵。
STJ是3NF,因為沒有任何非主屬性對鍵傳遞依賴或部分依賴。但STJ不是BCNF關係,因為T是決定因素而T不包含鍵。
分解為BCNF方法
需要消除不包含關係。
1. 假設R(U)不是BCNF, X是R的屬性子集,A是R的單個屬性,X->A是導致違反BCNF的函式依賴,則將R分解為R-A以及XA。
2.若R-A以及XA仍然不是BCNF,則在R-A以及XA遞歸地執行上述分解。
例SCT:(S#,CNAME,TNAME),FD:TNAME→CNAME。
可分解為SC(S#,TNAME)和CT(CNAME,TNAME),它們都是BCNF。