MySQL基础(七)-数据库设计三范式

一、什么是数据库设计范式?

数据库表的设计依据。即怎么进行数据库表的设计。

二、数据库设计范式的分类

总共有三种范式。

第一范式:

        要求任何一张表必须有主键,每一个字段原子性不可再分。

第二范式:

        建立在第一范式的基础之上。要求所有非主键字段完全依赖主键,不要产生部份依赖。

第三范式:

        建立在第二范式的基础之上。要求所有非主键字段完全依赖主键,不要产生传递依赖。

设计数据库表的时候,按照以上的范式进行,可以避免表中数据的冗余,空间的浪费。

三、第一范式

最核心、最重要的范式,所有表的设计都需要满足。

必须有主键,并且每一个字段都是原子性不可再分。

MySQL基础(七)-数据库设计三范式_第1张图片

四、第二范式

建立在第一范式的基础之上。

要求所有非主键字段必须完全依赖主键,不要产生部分依赖。

MySQL基础(七)-数据库设计三范式_第2张图片

产生部份依赖的缺点:数据冗余了,造成了空间的浪费。

为了让以上的表满足第二范式,需要使用三张表来表示多对多的关系:

        学生表

        学生编号(pk)        学生名字

        --------------------------------------------------

        1001                     张三

        1002                     李四

        1003                      王五

        教师表

        教师编号(pk)        教师姓名

        -------------------------------------------------

        001                        王老师

        002                        赵老师

        学生教师关系表

        id(pk)        学生编号(fk)        教师编号(fk)

        -------------------------------------------------------------

        1                1001                        001

        2                1002                        002

        3                1003                        001

        4                1001                        002

口诀】多对多,三张表,关系表两个外键

五、第三范式

        第三范式建立在第二范式的基础之上。要求所有非主键字段必须直接依赖主键,不要产生传递依赖。

MySQL基础(七)-数据库设计三范式_第3张图片

第一范式:

        满足,有主键

第二范式:

        满足,因为主键不是复合主键,没有产生部份依赖。主键是单一主键。

第三范式:

        不满足。一年一班依赖01,01依赖1001,产生了传递依赖。不符合第三范式的要求,产生了数据的冗余。

解决如上一对多的方式:

MySQL基础(七)-数据库设计三范式_第4张图片

 【口诀】一对多,两张表,多的表加外键。

六、总结:

一对多:

        一对多,两张表,多的表加外键。

多对多:

        多对多,三张表,关系表两个外键

一对一:

        【口诀】一对一,外键唯一

        在实际的开发中,可能存在一张表字段太多,太庞大,这时候需要对表进行拆分。

MySQL基础(七)-数据库设计三范式_第5张图片

你可能感兴趣的:(MySQL,数据库,mysql)