bcnf,全称为Boyce Codd Normal Form,中文叫巴斯范式/鲍依斯-科得范式,是由Boyce和Codd提出的,比3NF又进了一步,通常认为是修正的
第三范式。
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性质
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。
STJ是3NF,因为没有任何非主属性对键传递依赖或部分依赖。但STJ不是BCNF关系,因为T是决定因素而T不是
超键。
例二:假设
仓库管理关系表为StorehouseManage(仓库ID,存储物品ID,管理员ID,数量),且有一个管理员只在一个仓库工作;一个仓库可以存储多种物品。这个数据库表中存在如下决定关系:
(仓库ID,存储物品ID)→(管理员ID,数量) (管理员ID,存储物品ID)→(仓库ID,数量)
所以,(仓库ID,存储物品ID)和(管理员ID,存储物品ID)都是StorehouseManage的
候选关键字,表中的非
关键字段为数量,它是符合
第三范式的。但是,由于存在如下决定关系:
(仓库ID)→(管理员ID) (管理员ID)→(仓库ID)
即存在关键字段决定关键字段的情况,所以其不符合BCNF范式。
分解为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。
可分解为ST(S#,TNAME)和CT(CNAME,TNAME),它们都是BCNF。
例二:把仓库管理关系表分解为二个关系表:仓库管理:StorehouseManage(仓库ID,管理员ID);仓库:Storehouse(仓库ID,存储物品ID,数量)。