数据库范式:从BCNF到6NF的深入解析
1. Boyce - Codd范式(BCNF)
BCNF是对3NF的进一步细化。在某些情况下,当不满足特定条件时,BCNF会退化为3NF。
以记录动物园动物和饲养员信息的关系R6为例:
- R6{Zoo, Animal, Keeper}
- 函数依赖:[Zoo, Animal] → Keeper;Keeper → Zoo
- 主键:[Zoo, Animal]
虽然R6处于3NF,但不满足BCNF,因为Keeper不是候选键却明显是一个决定因素。利用希思定理,可将R6分解为:
- R7{Animal, Keeper} PK[Animal]
- R8{Keeper, Zoo} PK[Keeper]
达到BCNF有以下好处:
- 进一步减少数据重复和修改异常。
- 可以存储悬空记录,例如饲养员可在分配动物前先分配到动物园。
不过,BCNF也有缺点,为获取有用信息可能需要访问(连接)更多关系,如要得到Zoo - Animal对,需将R7和R8连接。
BCNF原理简单却深刻,遵循它可直接得到BCNF关系,绕过1NF、2NF和3NF,简化分析过程,且多数情况下无需进一步规范化。
2. 第四范式(4NF)
4NF针对相互独立但相关的属性形成关系,因低效排列导致数据重复和修改异常的情况。以教育机构的课程 - 教师 - 教材组合的数据库文件CTT - Schedule为例:
- 课程可由多位教师教授。
- 课程可需要任意数量的教材。
- 教师和教材相互独立
超级会员免费看
订阅专栏 解锁全文
4万+

被折叠的 条评论
为什么被折叠?



