MYSQL数据库设计三大范式

172 阅读3分钟

MYSQL数据库设计三大范式:

第一范式(1NF):

当关系模式R的所有属性都不能再分解为更基本的数据单位时,这个时候称R是满足第一范式的简称1NF

就是说表中的每列属性不可再分

例如:

Id姓名身高体重年龄。。。。。
1小博185/14022。。。。。

身高体重是两个属性,违反第一范式,不能划分为同一个列

符合第一范式的设计:

Id姓名身高体重年龄。。。。。
1小博18514022。。。。。

第二范式(2NF):

第二范式首先要满足第一范式并且表中非主键列不存在对主键不依赖或者部分依赖,确保每个列都和主键相关。一般因为是存在多个主键,或者存在复合主键,因此需要拆表

例如:

学号学科成绩学科学分。。。。。
1数学10010。。。。。

存在复合主键(学号,学科),而学科学分却只依赖分部主键-学科,不符合第二范式

符合第二范式的设计:

学号学科成绩
1数学100

 

学科学科学分
数学10

第三范式(3NF):

第三范式首先满足第二范式,并且表中的列不存在对非主键列的传递依赖,每列都和主键列直接相关,而不是间接相关

简单理解:在第二范式的基础上,表中的非主属性不可以存在依赖关系

例如:

学号(主键)姓名性别年级专业班主任姓名班主任性别班主任年龄
202001张三大一计算机科学与技术老张33
202002李四大二网络工程老李34
202003王舞大三软件工程老王35

\

上表中,我们可以看到表中的非主属性都依赖于(学号),满足了第二范式。 但是,(班主任性别、年龄)这两个属性是直接依赖于(班主任姓名)这一属性的,与(学号)属于间接依赖。 这就导致了表中的非主属性存在着依赖关系,不符合第三范式。

符合第三范式的设计:

学号(主键)姓名性别年级专业
202001张三大一计算机科学与技术
202002李四大二网络工程
202003王舞大三软件工程
班主任姓名(主键)班主任性别班主任年龄
老张33
老李34
老王35

将原表拆分为两张表:学生表与班主任表,在满足第二范式的同时,表中的非主属性都不存在着依赖关系,故符合第三范式

 

注意: 在设计过程中,三大范式不是需要严格遵守的,只是提供了一种设计规范


详细的参考文章:

link.juejin.cn/?target=htt…****