数据库的三大范式

数据库的三大范式

第一范式1NF

确保数据库表字段的原子性

Bad Case

用户表
userId userInfo
1 广东省 10086
2 福建省 12321

Good Case

用户表
userId userInfo userTel
1 广东省 10086
2 福建省 12321

Bad Case中把用户所属地区,和用户的电话融合在一起了,没有保证每个字段的原子性

第二范式2NF

在满足第一范式的基础下:

  • 一个表必须有一个主键
  • 非主键列必须完全依赖于主键,而不能只依赖于主键的一个部分

Bad Case

选课关系表
stuId stuName age courseName grade credit
1 张三 18 计算机组成原理 2023 4
1 张三 18 计算机网络 2023 3
2 李四 19 机器学习 2022 2

在Bad Case中,主键为\(<studId,courseName>\),其中\(credit\)完全依赖于\(courseName\)\(stuName,age\)完全依赖于\(stuId\),不符合第二范式,会产生以下问题:

  • 数据冗余:一个学生选\(n\)门课,学生名字和学号就会重复\(n\)
  • 插入异常:插入一门新的课,因为还没有学生选修,无法保存这一门课到表中

第三范式3NF

在满足第二范式的基础下:

  • 非主键列必须直接依赖于主键,不能存在传递依赖

Bad Case

学生关系表
stuId stuName age academyId academyTel
1 张三 18 6 10086
2 李四 19 6 10086
3 王五 18 21 12321

在Bad Case中,主键为\(stuId\),其中\(academyId\)依赖于\(stuId\),而\(academyTel\)依赖于\(academyId\),存在传递依赖,不符合第三范式