【MySQL】数据库的设计三范式

1、第一范式:字段不能再分

定义:每一个字段是原子性不能再分。

举例:  下图就不符合第一范式,因为contact列中不是原子性可以再分为phone和QQ

           经过修改后下图就满足第一范式。

 2、第二范式:有主键, 非主键字段完全依赖主键

定义:第二范式事建立在第一范式的基础之上,要求数据库中所有非主键字段完全依赖主键,不能产生部份依赖。

           也就是说不要使用联合主键

举例:如下图的表使用了联合主键(学生编号和老师编号)

 综合分析:1.以上虽然确定了主键,但此表会出现大量冗余

                   2.出现冗余的原因在于:学生姓名依赖于学生编号,而没有依赖老师编号,老师姓名依赖于老师编号,而没有依赖于                        学生编号

 解决方案:将学生表和老师表分开,分别是学生表、老师表、学生老师关联表

 3、第三范式

定义:建立在第二范式的基础之上,要求非主键字段不能产生传递依赖于主键字段

举例:学生信息表

 综合分析:1、从上图表看出,班级名称字段存在冗余,因为班级名称字段没有直接依赖于主键

                   2、班级名称字段依赖于班级编号,班级编号依赖于学生编号,这就产生了依赖传递!

 解决方案:可知学生和班级的关系为一对多,所以分别建学生表、班级表,学生表外键与班级表关联即可。 

                      一对多,在多的一方添加外键。 

猜你喜欢

转载自blog.csdn.net/weixin_41963657/article/details/89840402