1、什么是设计范式?
设计表的依据,按照三范式设计的表不会出现数据冗余。
2、三范式
满足三范式的目的是,减少数据冗余。
第一范式:
任何一张表都应该有主键,并且每一个字段都不能再分。
![4b9077bca2f240365ca5af85b973f1cb.png](https://i-blog.csdnimg.cn/blog_migrate/45695a71fe9e1cd4ec17ce69cc4fec0d.png)
上表违背了第一范式:
(1)没有主键
(2)联系方式字段可以再分
解决方式:
![e06c4b107cd53fc62dd9a6f58396c392.png](https://i-blog.csdnimg.cn/blog_migrate/79fc7b5c866ab5c41980bb84812b315e.png)
第二范式:
建立在第一范式的基础之上,所有非主键字段必须完全依赖主键,不能产生部分依赖。
![784d1988d5488baf22ecf7d8003e9b59.png](https://i-blog.csdnimg.cn/blog_migrate/cf324be2c6b4a9345dfd539308180269.png)
上表为多对多关系,并且是学生编号和教师编号形成的联合主键,并且每一列都不可再分,因此满足第一范式。但是学生姓名只依赖于学生编号,并非依赖教师编号,因此形成了部分依赖,所以不满足第二范式。
解决方法:
多对多,三张表,关系表两个外键。
t_student学生表:
![b080aa4df4397adbf725901d7039a172.png](https://i-blog.csdnimg.cn/blog_migrate/1f99647136d67a4ccfcb99e9d70b2ce9.png)
t_teacher教师表:
![edaac47418c964eb52cae109b04fab42.png](https://i-blog.csdnimg.cn/blog_migrate/2115067c0401fb28e1637dcf1a03082d.png)
t_student_t_teacher_relation 学生老师关系表:
![6b6a3e9afd61a26dff31cf287a2c1098.png](https://i-blog.csdnimg.cn/blog_migrate/87acfa47b14ab67aaf640e8cd65fc5a9.png)
第三范式:
建立在第二范式之上,所有非主键字段直接依赖主键,不能产生传递依赖。
学生信息表:
![6c9c9e7102a3ddc0f0949a4108a8d987.png](https://i-blog.csdnimg.cn/blog_migrate/46aa104e837061877517225a1ea2f84c.png)
上述表:
- 有主键,而且数据列不可再分,因此满足第一范式。
- 非主键列对主键是完全依赖关系,满足第二范式。
- 但是,班级名依赖于班级编号,而班级编号依赖于主键学生编号,产生了传递依赖关系,因此不满足第三范式。
解决方式:
一对多,两张表,多的表加外键。
班级表:t_class
![59dbe6e3b5e93879f9ce0c79d4d2fb20.png](https://i-blog.csdnimg.cn/blog_migrate/62a4b982f5c4b530677ed44fe5d1cd76.png)
学生信息表:t_student
![79ad4253c9032d58db5404355a1def38.png](https://i-blog.csdnimg.cn/blog_migrate/a791afa3150a2f29206865b728b7e77f.png)
提醒:
在实际开发中,以满足客户的需求为主,有的时候会拿数据的冗余来换执行速度。