文章目录
Boyce - Codd范式
具有函数依赖集合F的关系模式R属于BCNF的条件是,当且仅当对F+中所有函数依赖α → β(其中,α包含于β,且β包含于R),下列至少有一项成立:
- α → β是平凡的函数依赖(即,β包含于α)
- α是R的超码(即,R包含于α+,α → R)
回顾
:公共部分是否已子关系的键 → 无损连接分解
检查是否为BCNF
为检查非平凡依赖α →β 是违反BCNF的要求
- 计算α+
- 检验α+是否包含R的所有属性(即,是否为R的超码)
简化的测试:为检查具有函数依赖集合F的关系模式R是否属于BCNF,只需检查F中的函数依赖是否违反BCNF即可,而不需要检查F+中的所有函数依赖
- 可以证明如果F中没有违反BCNF的依赖,则F+中也没有违反BCNF的依赖
—因为
F+是由Armstrong的3个公理从F推出的而任何公理都会使函数依赖的左边变小(拆分),故若果F中没有违反BCNF的函数依赖(即,左边是超码),则F+中也不会。
但是,当检查R的分解后的关系时仅用F是错误的。
BCNF 分解算法
BCNF分解示例
BCNF与保持依赖
BCNF分解不总是保持依赖的
因此,我们并不总能满足这三个设计目标:
- 无损连接
- BCNF
- 保持依赖
第三范式(3NF)- 动机
存在这样的情况
- BCNF不保持依赖
- 但是,有效检查更新是违反函数依赖是重要的
解决方法:定义一种较弱的范式,称为第三范式(3NF)
- 允许出现一些冗余(从而会带来一些问题)
- 但