Boyce-Codd範式(英語:Boyce-Codd normal form,縮寫BCNF),是資料庫規範化的一種正規形式。是在第三正規化的基礎上加上稍微更嚴格約束,每個BCNF關係需滿足第三正規化。BCNF去除了屬性間的不必要的函數依賴。

BCNF的定義是:

如果對於關係模式R中存在的任意一個非平凡函數依賴X->A,都滿足X是R的一個超鍵,那麼關係模式R就屬於BCNF。

對上述定義,可以理解為:平凡函數依賴關係是指,如果屬性集合X包含了屬性集合A,那麼就一定有X->A;超鍵是指能夠唯一確定表中各行的屬性集合,因此一個超鍵的最小化就是一個候選鍵;BCNF是說,如果一個屬性集合X能「不平凡」地推導出另一個屬性集合A,而且X還不能唯一區分表的各行,那麼這個表中一定包含了一些冗餘資訊。

BCNF與第三正規化的不同之處在於:第三正規化中不允許非主屬性被另一個非主屬性決定,但第三正規化允許主屬性被非主屬性決定;而在BCNF中,任何屬性(包括非主屬性和主屬性)都不能被非主屬性所決定。

任何一個BCNF必然滿足:

  • 所有非主屬性都完全函數依賴於每個候選鍵
  • 所有主屬性都完全函數依賴於每個不包含它的候選鍵
  • 沒有任何屬性完全函數依賴於非候選鍵的任何一組屬性

範例

編輯

關係模式R:

Property_id#(主鍵) County_name Lot# Area

其中依賴關係如下:

{Property_id#}   ->{County_name,Lot#,Area};

{County_name,Lot#} ->{Property_id#,Area};

{Area}        ->{County_name};

很明顯最後一個依賴違反了BC正規形式的要求,Area不是關係模式R的主鍵,而依賴於它的County_name是能夠決定其他屬性的主屬性。故應當規範化為:

Property_id#(主鍵) Area Lot#
Area(主鍵) County_name

參考文獻

編輯

外部連結

編輯