BCNF(Boyce Codd Normal Form)

BCNF(Boyce Codd Normal Form)

BCNF(Boyce Codd Normal Form) #

关系模式 \(R \in 1NF\) ,若 \(X \rightarrow Y\) 且 \(Y \nsubseteq X\) 时,X必含有码,则 \(R \in BCNF\).

当3NF消除了主属性对码的部分函数依赖和传递函数依赖,则称为BCNF。

一个满足BCNF的关系模式,有如下性质:

  1. 所有非主属性对每一个码都是完全函数依赖。
  2. 所有非主属性对每一个不包含它的码,也是完全函数依赖。
  3. 没有任何属性完全函数依赖于非码的任何一组属性。

设R(Pno,Pname,Mname)的属性分别表示零件号、零件名和厂商名,如果约定,每种零件号只有一个零件名,但不同的零件号可以有相同的零件名;每种零件可以有多个厂商生产,但每家厂商生产的零件应有不同的零件名。这样我们可以得到如下一组函数依赖:

Pno → Pname,(Pname,Mname)→Pno

由于该关系模式R中的候选码为(Pname,Mname)或(Pno,Mname),因而关系模式R 的属性都是主属性,不存在非主属性对码的传递依赖,所以R是3NF的。但是,主属性Pname传递依赖于码(Pname,Mname),因此R不是BCNF的。

当一种零件由多个生产厂家生产时,零件名与零件号间的联系将多次重复,带来冗余和操作异常现象。若将R分解成:

R1(Pno,Pname)
R2(Pno,Mname)

就可以解决上述问题,并且分解后的关系模式R1、R2都属于BCNF。