图2
例如:
(学号,课名) P→ 姓名
传递函数依赖
假如 Z 函数依赖于 Y,且 Y 函数依赖于 X (感谢@百达
指出的错误,这里改为:『Y 不包含于 X,且 X 不函数依赖于 Y』这个前提),那么我们就称 Z 传递函数依赖于 X ,记作 X T→ Z,如图3。<img src="https://pic2.zhimg.com/50/51f8105fbbe92adaa3e343ea2db3bf49_hd.jpg" data-caption="" data-rawwidth="124" data-rawheight="77" class="content_image" width="124">
图3
码
设 K 为某表中的一个属性或属性组,若除 K 之外的所有属性都完全函数依赖于 K(这个“完全”不要漏了),那么我们称 K 为候选码,简称为码。在实际中我们通常可以理解为:假如当 K 确定的情况下,该表除 K 之外的所有属性的也就随之确定,那么 K 就是码。一张表中可以有超过一个码。(实际应用中为了方便,通常选择其中的一个码作为主码)
例如:
对于表3,(学号、课名)这个属性组就是码。该表中有且仅有这一个码。(假设所有课没有重名的情况)

非主属性
包含在任何一个码中的属性成为主属性。
例如:
对于表3,主属性就有两个,学号 与 课名。
终于可以回过来看2NF了。首先,我们需要判断,表3是否符合2NF的要求?根据2NF的定义,判断的依据实际上就是看数据表中是否存在非主属性对于码的部分函数依赖。若存在,则数据表最高只符合1NF的要求,若不存在,则符合2NF的要求。判断的方法是:
第一步:找出数据表中所有的码。
第二步:根据第一步所得到的码,找出所有的主属性。
第三步:数据表中,除去所有的主属性,剩下的就都是非主属性了。
第四步:查看是否存在非主属性对码的部分函数依赖。
对于表3,根据前面所说的四步,我们可以这么做:
第一步:
查看所有每一单个属性,当它的确定了,是否剩下的所有属性都能确定。
查看所有包含有两个属性的属性组,当它的确定了,是否剩下的所有属性都能确定。
……
查看所有包含了六个属性,也就是所有属性的属性组,当它的确定了,是否剩下的所有属性都能确定。
看起来很麻烦是吧,但是这里有一个诀窍,就是假如A是码,那么所有包含了A的属性组,如(A,B)、(A,C)、(A,B,C)等等,都不是码了(因为作为码的要求里有一个“完全函数依赖”)。
图4表示了表中所有的函数依赖关系:
<img src="https://pic3.zhimg.com/50/51e2689ac9416a91800e63101bee9db7_hd.jpg" data-caption="" data-rawwidth="541" data-rawheight="212" class="origin_image zh-lightbox-thumb" width="541" data-original="https://pic3.zhimg.com/51e2689ac9416a91800e63101bee9db7_r.jpg">
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-56344-3.html
这个不是很懂
就被打沉好几艘