数据库三范式

数据库除了ACID【包括原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)】特性外,还应该满足3NF。数据库三范式‌是关系型数据库设计中的三个标准化原则,旨在消除冗余数据,提高数据存储效率和查询性能。它们分别是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。‌


第一范式(1NF)

第一范式要求数据库表中的每个字段都是原子性的,即不可再分的数据项。这意味着表中的每个字段都应该是一个最小单位,不能被拆分成多个字段。

例如,在一个学生表中,姓名、年龄、性别等字段都应该是不可再分的原子数据项。

如学生表,这里包括3个信息,应该设计为3个字段

学生
张三,18,男
李四,17,女
王五,18,男
不合理的设计

应该这样设计

姓名年龄性别
张三18
李四17
王五18
合理的设计


第二范式(2NF)

在满足第一范式的基础上,第二范式要求表中的非主键字段必须完全依赖于主键,不能只依赖于主键的一部分。

例如,在一个学生成绩表中,学生ID和课程ID联合作为主键,成绩字段必须完全依赖于这两个ID的组合,而不能只依赖于其中一个ID。

如学生对应的成绩,这里包括每个人对应各科的成绩

姓名年龄性别课程分数班级
张三18语文90高三(1)班
张三18数学88高三(1)班
张三18英语98高三(1)班
李四17语文99高三(2)班
李四17数学72高三(2)班
李四17英语92高三(2)班
王五18语文78高三(3)班
王五18数学100高三(3)班
王五18英语56高三(3)班
不合理的设计

应该这样设计

id姓名年龄性别班级
1张三18高三(1)班
2李四17高三(2)班
3王五18高三(3)班
学生表
id课程
1语文
2数学
3英语
课程表
用户ID课程ID分数
1190
1288
1398
2199
2272
2392
3178
32100
3356
分数表

这个设计只满足了2NF,如果需要满足3NF,还需要把班级表进行拆分。

第三范式(3NF)

第三范式进一步要求非主键字段只能依赖于主键,而不能依赖于其他非主键字段。这意味着表中的字段之间不能存在传递依赖关系。

接2NF的例子。应该拆分为4个表,这样才满足3NF的设计。

id姓名年龄性别班级ID
1张三181
2李四172
3王五183
学生表
id课程
1语文
2数学
3英语
课程表
id班级
1高三(1)班
2高三(2)班
3高三(3)班
班级表
用户ID课程ID分数
1190
1288
1398
2199
2272
2392
3178
32100
3356
分数表

常用数据库建模线条

常用数据库模型线条
This entry was posted in 默认. Bookmark the permalink.