第二范式比较官方的解释是:
第二范式( 2NF )要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属
性组,作为实体的唯一标识。例如在员工表中的身份证号码即可实现每个员工的区分,该身份证号码即为候选键,
任何一个候选键都可以被选作主键。在找不到候选键时,可额外增加属性以实现区分。 第二范式( 2NF )要求实
体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。如果存在,那么这个属
性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常
需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是在第一范式的基础上属性完全依赖于
主键。
嗯,读完之后似懂非懂,最后到底是个什么玩意,还是一脸懵逼
一、我们先从概念入手:
比如一张表中有这么些属性:key1,key2,列1,列2,列3
其中key1和key2组成主键,第二范式就是说列1、2、3完全依赖于key1+key2,而不是仅依赖于key1或者仅依赖于key2(也就是部分依赖)。
大白话说就是只要你告诉我key1和key2 的值,我就能立马确定出列1、2、3的值,但是如果你只告诉我key1或者key2的值,那么抱歉,鬼知道列1、2、3的值是多少,除非它是部分依赖。
从函数方面看完全依赖,z=2x+3y (类比 x:key1; y:key2; z:列1、2、3) ,只知道x或者y的值是无法确定出z值的!
部分依赖就是z=2x、z=3y ,不再具体解释
说了这么多,应该理解 完全依赖和部分依赖 的意思了吧
二、为什么
那么再说一说为什么要有第二范式:
举个例子:
学号、课程、姓名、门派、掌门、分数,我们用 ‘学号+课程’ 作为主键来建表
可以看到,表里有很多重复的数据,造成数据冗余,就像一个人明明可以一句话就能说清楚的事,非要重复多遍,是不是有种欠抽的感觉!
后来经过我们的前辈研究发现,凡是有这种数据冗余的现象都有部分依赖迹象的存在,就像该表中的 姓名、门派、掌门部分依赖于学号,最后把它总结归纳为第二范式,编入我们的三浪箴言,,额。。。是三范式箴言。
所以我们把上表拆分为两张:
以上内容纯属自己的见解,如有不对的地方,望指正,谢谢
参考资料:
https://blog.csdn.net/weixin_43971764/article/details/88677688
https://blog.csdn.net/u013164931/article/details/79692402?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase