1.第一范式
第一范式: 1NF 只要是关系型数据库,默认满足第一范式
错误案例一:
t_teacher
id |
授课时间 |
1 |
20190510,20190530 |
2 |
20190508,20190529 |
3 |
20190509,20190528 |
改善表为
t_teacher
id |
授课开始时间 |
授课结束时间 |
1 |
20190510 |
20190530 |
2 |
20190508 |
20190529 |
3 |
20190509 |
20190528 |
错误案例二:
t_article
id |
summary |
tag_id |
1 |
Mysql性能优化 |
1,2,3,4,5,6 |
改善表为 article, tag
t_article
t_tag
id |
article_id |
1 |
1 |
2 |
1 |
3 |
1 |
4 |
1 |
5 |
1 |
2.第二范式
2NF 消除对主键部分依赖
主键:可以唯一标识记录的字段或者字段集合。
t_class
老师 |
性别 |
班级 |
教室 |
开始 |
结束 |
孔子 |
男 |
Mysql01 |
J308 |
19:00 |
21:00 |
李清照 |
女 |
诗词 |
W2011 |
10:00 |
12:00 |
孔子 |
男 |
Mysql02 |
J307 |
14:00 |
16:00 |
通过老师和班级组成复合主键,然而性别对老师有依赖,也就是性别、教室都与主键有部分依赖
改善方案:
t_class
id |
老师 |
性别 |
班级 |
教室 |
开始 |
结束 |
1 |
孔子 |
男 |
Mysql01 |
J308 |
19:00 |
21:00 |
2 |
李清照 |
女 |
诗词 |
W2011 |
10:00 |
12:00 |
3 |
孔子 |
男 |
Mysql02 |
J307 |
14:00 |
16:00 |
3.第三范式
3NF 消除对主键的传递依赖
t_class
id |
teacher_id |
班级 |
教室 |
开始 |
结束 |
1 |
1 |
Mysql01 |
J308 |
19:00 |
21:00 |
2 |
2 |
诗词 |
W2011 |
10:00 |
12:00 |
3 |
1 |
Mysql02 |
J307 |
14:00 |
16:00 |
t_teacher
4.总结
满足第三范式
- 独立数据独立建表
- 表中存在与业务逻辑无关的ID主键
- 表之间的关系由关联字段(关联表)进行表示
优势