首页 >> 基础教程

关系数据库的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. 避免更新异常:

  • 修改地址只需更新客户表中的一行。
  1. 防止删除丢失:
  • 删除订单不会误删客户信息。
  1. 确保一致性:所有关联数据通过外键引用同一来源。

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

所有评论

最新文章
20.5 性能优化建议2026-05-08
20.4 复杂查询实现2026-05-08
20.3 表创建与数据初始化2026-05-08
20.2 数据库设计2026-05-08
20.1 项目需求分析:博客系统2026-05-08
19.4 自动化备份策略2026-05-08
19.3 导出和导入数据2026-05-08
19.2 恢复备份数据2026-05-05
19.1 使用mysqldump备份数据2026-05-05
18.4 实战:开发简单的学生管理系统2026-05-05
关于我 备案号:蜀ICP备2023042032号-1