bcnf

bcnf

bcnf,全稱為Boycee Codd Normal Form,中文叫巴斯範式,是由Boyce和Codd提出的,比3NF又進了一步,通常認為是修正的第三範式

設關係模式R∈1NF,如果對於R的每個函數依賴X→Y,若Y不屬於X,則X必含有超碼,那麼R∈BCNF。滿足BCNF條件有:所有非主屬性對每一個候選鍵都是完全函數依賴;所有的主屬性對每一個不包含它的候選鍵,也是完全函數依賴;沒有任何屬性完全函數依賴於非候選鍵的任何一組屬性。

BCNF簡介


是由Boyce和Codd提出的,比3NF又進了一步,通常認為是修正的第三範式.所謂第三範式,定義是關係模式R中若不存在這樣的鍵X,屬性組Y及非主屬性Z,使得X—>Y,Y—>Z成立,(不存在Y—>X),則稱R為3NF.
即當2NF(第二範式)消除了非主屬性對鍵的傳遞函數依賴,則稱為3NF
對3NF關係進行投影,將消除原關係中主屬性對鍵的部分與傳遞依賴,得到一組BCNF關係。

BCNF定義


關係模式R∈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。