首页 >> 基础教程

关系数据库的3大范式

关系数据库的三大范式(1NF、2NF、3NF)是数据库设计的核心原则,用于减少数据冗余、避免更新异常,并确保数据一致性

范式核心目标总结表

范式核心要求解决什么问题违反时的典型问题
1NF列原子性(不可再分)数据存储的规范性重复存储、查询困难
2NF消除非主属性对主键的部分依赖部分数据冗余更新异常(修改部分数据需多次操作)
3NF消除非主属性对主键的传递依赖间接依赖导致冗余删除或更新时丢失关联数据


详细解析与示例

1. 第一范式 (1NF):确保列的原子性

  • 要求

    • 每列都是不可再分的原子值(不能是数组、集合或复合结构)。

    • 每行有唯一标识(通常用主键)。

  • 反例


订单ID
商品
1001
手机,耳机


商品列包含多个值,违反1NF
  • 符合1NF的设计

订单id商品
1001手机
1002耳机

拆分多行,每行一个值

2. 第二范式 (2NF):消除部分依赖

  • 前提:已满足1NF。

  • 要求
    非主属性必须完全依赖于整个主键(针对复合主键)。

  • 反例

    学生id课程id学生姓名课程成绩




问题:学生姓名 只依赖 学生ID(部分依赖主键),与课程无关。
  • 符合2NF的设计

学生表

学成id学生名称

课程表

学生id课程id课程成绩

2. 三范式 (3NF):消除传递依赖

  • 前提:已满足2NF。

  • 要求
    非主属性不能传递依赖于主键(即不能通过其他非主属性间接依赖主键)。

  • 反例

订单id
客户id客户姓名
客户地址

问题:客户地址 依赖于 客户ID(非主键),而 客户ID 又依赖于主键 订单ID(传递依赖)。
  • 符合3NF的设计

订单表

订单id客户id

客户表

客户id客户姓名客户地址


为什么需要范式?

  1. 减少冗余:相同数据只存一份(如客户地址)。

  2. 避免更新异常

    • 修改地址只需更新客户表中的一行。

  3. 防止删除丢失

    • 删除订单不会误删客户信息。

  4. 确保一致性:所有关联数据通过外键引用同一来源。


范式是死的,人是活的,怎么设计好处多怎么来。不要被范式束缚了。





最新文章
InnoDB 和 MyISAM 主要有什么区别?2025-07-06
mysql存储引擎应该怎么选择?2025-07-06
mysql的几种存储引擎2025-07-06
MySQL 的段区页行2025-07-06
一条更新语句是如何执行的?2025-07-06
mysql中一条查询语句是如何执行的?2025-07-02
MySQL基础架构及执行流程解析2025-07-02
MySQL SQL语法树解析过程详解2025-07-02
mysql中SQL 的隐式数据类型转换?2025-07-01
MySQL 第 3-10 条记录怎么查?2025-06-30
备案号:蜀ICP备2023042032号-1