BCNF范式在3NF基础上消除对主码子集的依赖。
以仓库管理关系表为例:仓库号,存储物品号,管理员号,数量。首先该表满足第三范式,也就是说一个管理员只在一个仓库工作,一个仓库能够存储多种物品。表中存在有如下依赖关系:
(仓库号,存储物品号)——>(管理员号,数量)
(管理员号,存储物品号)——>(仓库号,数量)
由以上依赖关系可以得知(仓库号,存储物品号)和(管理员号,存储物品号)为表关系中的候选码。
表中唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:
(仓库号)——>(管理员号)
(管理员号)——>(仓库号)
即存在关键字段决定关键字段的情况,因此其不符合BCNF。
解决方法:把仓库管理关系表分解为两个关系表仓库管理表(仓库号,管理员号)和仓库表(仓库号,存储物品号,数量),这样这个数据库表是符合BCNF的,并消除了删除异常、插入异常和更新异常。
扩展资料:
巴斯-科德范式(BCNF)是第三范式(3NF)的一个子集,即满足巴斯-科德范式(BCNF)必须满足第三范式(3NF)。通常情况下,巴斯-科德范式被认为没有新的设计规范加入,只是对第二范式与第三范式中设计规范要求更强,因而被认为是修正第三范式。
也就是说,它事实上是对第三范式的修正,使数据库冗余度更小。这也是BCNF不被称为第四范式的原因。某些书上,根据范式要求的递增性将其称之为第四范式是不规范,也是更让人不容易理解的地方。而真正的第四范式,则是在设计规范中添加了对多值及依赖的要求。
参考资料来源:百度百科-数据库范式
Boyce-Codd范式(英语:Boyce-Codd normal form,缩写BCNF),是数据库规范化的一种正规形式。
是在第三范式的基础上加上稍微更严格约束,每个BCNF关系都满足第三范式。BCNF去除了属性间的不必要的函数依赖。
如果对于关系模式R中存在的任意一个非平凡函数依赖X->A,都满足X是R的一个超键,那么关系模式R就属于BCNF。
平凡函数依赖关系是指,如果属性集合X包含了属性集合A,那么就一定有X->A;超键是指能够唯一确定表中各行的属性集合,因此一个超键的最小化就是一个候选键;BCNF是说,如果一个属性集合X能“不平凡”地推导出另一个属性集合A,而且X还不能唯一区分表的各行,那么这个表中一定包含了一些冗余信息。
BCNF与第三范式的不同之处在于:第三范式中不允许非主属性被另一个非主属性决定,但第三范式允许主属性被非主属性决定;而在BCNF中,任何属性(包括非主属性和主属性)都不能被非主属性所决定。
BCNF性质
1 、所有非主属性对每一个候选键都是完全函数依赖;
2 、所有的主属性对每一个不包含它的候选键,也是完全函数依赖;
3 、没有任何属性完全函数依赖于非候选键的任何一组属性。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)