对于后端来说最重要的就是表啦,一张符合规范的表能省去后期很大的力气,下边是一些个人对建表三大范式的理解(萌新复习,大神请绕过)
第一范式
原子性,每一列都不可再拆分出其他东西啦,必须是不可拆分的,比如学生表,姓名不可拆,但地址就可拆成省,市,区
但一般建成的表都满足这第一范式,要不然不满足第一范式的连表都建不出,因为mysql并不支持合并列的表
第二范式
在第一范式的基础上所有非码属性必须完全函数依赖于候选码(在第一范式的基础上,消除非主属性对主码的部分函数依赖)
(这里贴张图加深下理解,图1-1是一张满足第一范式,不符合第二范式的表)
图1-1
图1-2
在图1-1中,这里的主码是学号+课程名称(姓名+课程名称也行,但不严谨,姓名并不唯一,所以一般用学号)其中姓名,系名,系主任,分数都可通过学号+课程名称确定唯一值,就是说姓名,系名,系主任,分数函数依赖于学号+课程名称
其中姓名,系名,系主任部分函数依赖于学号+课程名称,因为通过学号也可以确认这些值
第二范式要做的就是消除部分函数依赖,要进行表的拆分,图1-3是符合第二范式的表,
分数完全函数依赖于学号+课程名
姓名,系名,系主任完全函数依赖于学号
图1-3
第三范式
消除非主属性组的传递依赖
图1-3中 虽然系名,系主任完全函数依赖于学号,但系主任又完全函数依赖于系名,中间存在着传递依赖,解决的办法再拆表
如图1-4
拆完后
所有的表都是完全函数依赖,没有传递依赖及部分函数依赖,就是张规范的表
建表时遵循这三大规范就没什么问题啦
萌新复习,讲范式的视频可以看这个,讲的很好