第一范式(1NF):每一列都是不可分割的原子数据项
好处:减少了数据冗余
存在可再分项,一条订单存储了多个商品
班级 |
日期 |
学号 |
姓名 |
图书编码 |
图书名 |
单价 |
数量 |
C1 |
1-22 |
1 |
程少商 |
1001 |
星汉灿烂 |
45 |
500 |
1002 |
月升沧海 |
32 |
200 |
||||
C2 |
4-30 |
2 |
田枣 |
1003 |
胡同 |
38 |
178 |
1004 |
摔跤记 |
26 |
54 |
||||
C3 |
8-2 |
3 |
柳依依 |
1005 |
萌妻食神 |
60 |
802 |
1004 |
柔弱少女 |
32 |
100 |
图书编码 |
图书名 |
单价 |
数量 |
1001 |
星汉灿烂 |
45 |
500 |
1002 |
月升沧海 |
32 |
200 |
1003 |
胡同 |
38 |
178 |
1004 |
摔跤记 |
26 |
54 |
1005 |
萌妻食神 |
60 |
802 |
1004 |
柔弱少女 |
32 |
100 |
应拆分成
班级 |
日期 |
学号 |
姓名 |
C1 |
1-22 |
1 |
程少商 |
C2 |
4-30 |
2 |
田枣 |
C3 |
8-2 |
3 |
柳依依 |
第二范式(2NF):表中只能存储一种数据,确保的每一列所有字段都必须和主键有关
好处:利于维护、修改和展示
出现冗余
图书编码 |
图书名 |
单价 |
数量 |
1001 |
星汉灿烂 |
45 |
500 |
1002 |
月升沧海 |
32 |
200 |
1003 |
胡同 |
38 |
178 |
1004 |
摔跤记 |
26 |
54 |
1005 |
萌妻食神 |
60 |
802 |
1004 |
柔弱少女 |
32 |
100 |
应拆分成
班级 |
图书编码 |
数量 |
C1 |
1001 |
500 |
C2 |
1002 |
200 |
C2 |
1002 |
200 |
C3 |
1003 |
178 |
图书编码 |
图书名 |
单价 |
1001 |
星汉灿烂 |
45 |
1002 |
月升沧海 |
32 |
1003 |
胡同 |
38 |
1004 |
摔跤记 |
26 |
1005 |
萌妻食神 |
60 |
1004 |
柔弱少女 |
32 |
第三范式(3NF):确保表中的每列都和主键直接相关,而不是间接相关
好处:修改了一个字段不会影响其他字段
没有主键直接相关
班级 |
日期 |
学号 |
姓名 |
C1 |
1-22 |
1 |
程少商 |
C2 |
4-20 |
2 |
田枣 |
C3 | 8-2 | 3 |
柳依依 |
应拆分成
班级 |
日期 |
学号 |
C1 |
1-22 |
1 |
C2 |
4-30 |
2 |
C3 |
8-2 |
3 |
学号 | 姓名 |
1 | 程少商 |
2 | 田枣 |
3 | 柳依依 |