闲话数据库(二)---第三范式/BCNF

本文解析了数据库设计中的第三范式(3NF)与巴科斯范式(BCNF)的概念,阐述了如何通过消除非主属性对码的传递函数依赖来实现3NF,并进一步介绍了BCNF的要求及其实现条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第三范式:若关系模式R(U,F)中不存在这样的码X,属性组Y以及非主属性Z(Z不是Y的子集)使得Y函数依赖于X并且X不函数依赖于Y,Z函数依赖于Y成立,则关系模式R属于3NF。

相当的绕口,并且不清醒的时候看它只会更加的想睡觉。

但是把这个转变成另外一种表述:2NF只要消除了非主属性对码的传递函数依赖,则进阶到3NF.

首先对最上面的数学表述形式分析:找不到这样的X,使得: X是码,Y一定是非主属性组,Z非平凡函数依赖于Y。

仔细进一步分析:假如Z非平凡函数依赖于Y,那么Y里面会包含码的存在。如果Y包含码,那么Y和码X就是相互函数依赖的。出现违背条件的推理了。对于第三范式的数学证明最好的方式就是类似上面推理的反证法了。当动手证明完了,就会得到2NF消除完非主属性对码的传递函数依赖就是3NF。

将数据库模式变换成为3NF以及以上的范式的时候,才会说数据库达到规范化标准。变换处理的过程称为关系模式的规范化处理。

一旦达到3NF,就要有一个观念:非主属性对码没有传递函数依赖。


3NF做的变化是化简,虽然化简的过程没有给出具体的操作。


BCNF:若关系模式R属于1NF,对任何任何Y非平凡函数依赖与X,Y不是X的子集,同时X均包含码,则R属于BCNF。

仔细一看,这个应该是要比第三范式更高级别的范式。在函数依赖消除的要求标准上应该是做的相当好了。如果R中的码是所有属性组合形成的,没有单一属性的码,这个还是仅仅只能做到3NF,却达不到BCNF要求的。


关系模式继续的化简,消除非主属性间的函数依赖和传递函数依赖,规范化会进一步得到提升。当然还是会遗留一些问题的,例如多值问题。


当然对于现实的数据库的规范化程度取决的条件有很多,例如规范化费用,人员水平,重视程度等等。所以上面的这些都是行动的guideline,不要认为拿到手的数据库规范是严格做到的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值