范式与规范化
关系范式化
关系范式化的目标是: 减少冗余, 避免更新/插入/删除异常, 提高数据独立性.
-
1NF: 要求所有属性都不可分 (不能存在表中表)
以下就是不满足 1NF 的例子

-
2NF: 在 1NF 的基础上, 要求所有属性都完全依赖主键
举例: 不满足 2NF: , , -
3NF: 在 2NF 的基础上, 非主属性都不传递依赖于主键
举例: 不满足 3NF: , -
BCNF: 在 1NF 基础上, 对于每个非平凡函数依赖 , 必须超键, 也就是所有的属性都不能传递依赖于候选键
- 问: 满足 BCNF 的关系模式, 其中 是主属性, 不是主属性, 那么是否可能存在 ?
- 答: 不存在, 因为 不满足 BCNF
能函数决定全部属性称为一个 超键, 超键可能里可能存在不是主属性的属性
极小超键就是 候选键, 是不能再删减属性的超键BCNF 的定义是在 1NF 的基础上, 但其实它要比 3NF 更严格, 满足 BCNF 的一定满足 3NF
-
4NF: 在 基础上, 消除非平凡多值依赖
非平凡多值依赖指的是, 会决定一组 值, 并且还有其他属性与 相互独立
因此非平凡多值依赖至少有 3 个属性比如: , 一门课程可能由多个老师教, 老师可能对应的教材也可能不同, 即使是相同的老师, 也不是每一届都用相同的教材. 因此教材和教材的所有组合都可能会出现, 这就是 非平凡多值依赖
-
5NF: 在 4NF 基础上, 消除非平凡连接依赖
如果一个关系可以无损分解成多个投影, 再连接后能还原, 就存在连接依赖
5NF 要求每个非平凡连接依赖都由候选键蕴含
最常用的就是 1NF, 2NF, 3NF, BCNF
数据库的设计不仅要考虑数据的冗余, 还要考虑数据库的性能
在某些商业数据库上, 性能往往更重要
增加一些冗余往往能减少查找的链路和跨表操作
- 标题: 范式与规范化
- 作者: Lucas
- 创建于 : 2026-09-17 08:10:29
- 更新于 : 2026-09-25 13:25:05
- 链接: https://darkflamemasterdev.github.io/2026/09/17/范式与规范化/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
