对于后端来说最重要的就是表啦,一张符合规范的表能省去后期很大的力气,下边是一些个人对建表三大范式的理解(萌新复习,大神请绕过)

第一范式

原子性,每一列都不可再拆分出其他东西啦,必须是不可拆分的,比如学生表,姓名不可拆,但地址就可拆成省,市,区

但一般建成的表都满足这第一范式,要不然不满足第一范式的连表都建不出,因为mysql并不支持合并列的表

第二范式

在第一范式的基础上所有非码属性必须完全函数依赖于候选码(在第一范式的基础上,消除非主属性对主码的部分函数依赖)

(这里贴张图加深下理解,图1-1是一张满足第一范式,不符合第二范式的表)

图1-1

mysql 表建模_mysql 表建模


图1-2

mysql 表建模_mysql 表建模_02

在图1-1中,这里的主码是学号+课程名称(姓名+课程名称也行,但不严谨,姓名并不唯一,所以一般用学号)其中姓名,系名,系主任,分数都可通过学号+课程名称确定唯一值,就是说姓名,系名,系主任,分数函数依赖于学号+课程名称

其中姓名,系名,系主任部分函数依赖于学号+课程名称,因为通过学号也可以确认这些值

第二范式要做的就是消除部分函数依赖,要进行表的拆分,图1-3是符合第二范式的表,

分数完全函数依赖于学号+课程名
姓名,系名,系主任完全函数依赖于学号

图1-3

mysql 表建模_完全函数依赖_03

第三范式

消除非主属性组的传递依赖

图1-3中 虽然系名,系主任完全函数依赖于学号,但系主任又完全函数依赖于系名,中间存在着传递依赖,解决的办法再拆表

如图1-4

mysql 表建模_mysql 表建模_04


拆完后

所有的表都是完全函数依赖,没有传递依赖及部分函数依赖,就是张规范的表

建表时遵循这三大规范就没什么问题啦
萌新复习,讲范式的视频可以看这个,讲的很好