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
id | summary |
---|---|
1 | Mysql性能优化 |
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
id | 姓名 | 性别 |
---|---|---|
1 | 孔子 | 男 |
2 | 李清照 | 女 |
4.总结
满足第三范式
- 独立数据独立建表
- 表中存在与业务逻辑无关的ID主键
- 表之间的关系由关联字段(关联表)进行表示
优势
- 减少数据冗余
- 易于维护更新
网友评论