范式与规范化

范式与规范化

Lucas

关系范式化

关系范式化的目标是: 减少冗余, 避免更新/插入/删除异常, 提高数据独立性.

  • 1NF: 要求所有属性都不可分 (不能存在表中表)
    以下就是不满足 1NF 的例子
    不满足 1NF.png

  • 2NF: 在 1NF 的基础上, 要求所有属性都完全依赖主键
    举例: 不满足 2NF: R(学号,姓名,课程号,课程名)R(学号,姓名,课程号,课程名), 学号→姓名学号\to 姓名, 课程号→课程名课程号\to 课程名

  • 3NF: 在 2NF 的基础上, 非主属性都不传递依赖于主键
    举例: 不满足 3NF: R(学号,姓名,学院,学院电话)R(学号,姓名,学院,学院电话), 学号→学院→学院电话学号\to 学院\to 学院电话

  • BCNF: 在 1NF 基础上, 对于每个非平凡函数依赖 X→YX\to Y, XX 必须超键, 也就是所有的属性都不能传递依赖于候选键

    • 问: 满足 BCNF 的关系模式, AB→CAB\to C 其中 AA 是主属性, BB 不是主属性, 那么是否可能存在 A→B→CA\to B\to C ?
    • 答: 不存在, 因为 B→CB\to C 不满足 BCNF

    能函数决定全部属性称为一个 超键, 超键可能里可能存在不是主属性的属性
    极小超键就是 候选键, 是不能再删减属性的超键

    BCNF 的定义是在 1NF 的基础上, 但其实它要比 3NF 更严格, 满足 BCNF 的一定满足 3NF

  • 4NF: 在 BCNFBCNF 基础上, 消除非平凡多值依赖

    非平凡多值依赖指的是, XX 会决定一组 YY 值, 并且还有其他属性与 YY 相互独立
    因此非平凡多值依赖至少有 3 个属性

    比如: R(课程号,教师编号,教材编号)R(课程号,教师编号,教材编号), 一门课程可能由多个老师教, 老师可能对应的教材也可能不同, 即使是相同的老师, 也不是每一届都用相同的教材. 因此教材和教材的所有组合都可能会出现, 这就是 非平凡多值依赖

  • 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 进行许可。
评论
目录
范式与规范化