目录

(1)求最小函数依赖集

(2)求候选码

(3)求R最高属于哪级范式

总结:


以一道例题来看:

3.已知关系模式R<ABCDEG>
F={BC-->E,DC-->B,D-->A,B-->G,D-->E,E-->G,B-->C} 求:
①F的最小函数依赖集        ②R的候选码        ③R最高属于哪级范式

(1)求最小函数依赖集

首先,看F={BC-->E,DC-->B,D-->A,B-->G,D-->E,E-->G,B-->C},将每一个推导依次去掉,看其他推导能否推出这一推导,如果可以就把这一推导去掉,例如将BC-->E去掉,看在其他推导中BC能否推出E

F={BC-->E,DC-->B,D-->A,B-->G,D-->E,E-->G,B-->C},即F - {BC-->E}

BC--->G,推不出E,不是多余的,不能将其删去

F={BC-->E,DC-->B,D-->A,B-->G,D-->E,E-->G,B-->C},即F - {DC-->B}

DC-->AEG,推不出B,不是多余的,不能将其删去

F={BC-->E,DC-->B,D-->A,B-->G,D-->E,E-->G,B-->C},即F - {D-->A}

D-->EG,推不出A,不是多余的,不能将其删去

F={BC-->E,DC-->B,D-->A,B-->G,D-->E,E-->G,B-->C},即F-{B-->G}

B-->CEG,可以从其他推导中推出G,所以这是多余的,需要删除

同理其他依次判断,得到F:

F={BC-->E,DC-->B,D-->A,D-->E,E-->G,B-->C}

现在看左边不是单个的推导式:BC-->E,DC-->B,

对于BC-->E,若B-->E或C-->E,则也可以简化

例如B-->C,BC-->E,所以B+=BCE,包含E,所以可以简化,另一个同理,D-->B或D-->C都不满足,所以还是DC-->B

所以最终简化得最小函数依赖集

F={B-->E,DC-->B,D-->A,D-->E,E-->G,B-->C}

(2)求候选码

只在左边的元素:L:{D}

只在右边的元素:R:{A,G}

两边都有的:LR:{B,C,E}

只在左边出现的,一定是候选码,所以D一定是候选码,只在右边出现的,一定不是候选码,而两边都在的则不确定是不是候选码

首先,看D--->u(全集),若D能推出全集则一定是唯一候选码

D-->AEG,不能推出全集,所以D不是唯一的候选码

接着,我们将D与LR组合,先组成2个为1组的,再3个为一组的,看是否能以尽量少的元素推出全集

DB--->AEGC,能够推出全集,所以BD是候选码

DC--->AEGB,能够推出全集,所以DC是候选码

DE--->AG,不能推出全集,所以DE不是候选码

这里DCB不是候选码,因为比他更少元素的DB,DC已经能推出全集了,所以{DB,DC是候选码}

若DB,DC,DE,都不能推出全集,就应该往3个为一组推了,即DBC,DBE,DCE

(3)求R最高属于哪级范式

如果你看懂如下图,就都明白了:

现在通过例子来细说一下:

F={B-->E,DC-->B,D-->A,D-->E,E-->G,B-->C}

上面例子已经求出,候选码为{DB,DC}

主属性为:D,B,C

非主属性:A,E,G

判断是否为2NF,即候选码的真子集(D或B或C)是否能推出A或E或G

由于D-->A,又因为D\nsubseteq(真包含)于{D,B},非主属性A部分依赖于候选键DB,所以存在部分依赖,其是1NF,不是2NF,即最高属于1NF

上面说明了1NF,现在说说其余范式:

对于2NF,若非主属性传递依赖于候选键,则为2NF,例如

B-->A,A-->C

①若B是候选键,C是非主属性

②并且A不能推出B,只有B能推出A

只有这两个步都满足时,才能说C传递依赖于B

再举一例:

对于R(A,B,C,D),F={B-->D,D-->B,AB-->C}

按照上面的(1)可知,最小函数依赖集就为F={B-->D,D-->B,AB-->C}

由(2)的步骤得到候选键为AB,AD

主属性为:A,B,D

非主属性为:C

由于F={B-->D,D-->B,AB-->C},非主属性C不部分依赖于候选键AB,只有AB能推出C,单独的A不行,单独的B也不行,所以其不是1NF

由于F={B-->D,D-->B,AB-->C},也不存在非主属性传递依赖于候选键,所以也不是2NF

由于依赖项的左边为B,D,AB,B和D都不是候选键,所以不满足左边全部为候选键,所以其不是BCNF,最高为3NF

再举一例:

R(A,B,C),F={A-->B,B-->A,A-->C}

由(1)(2)可得,候选键为A,B

可以很直观地看到不是部分依赖,其不是1NF,再看是不是2NF,2NF需要满足

① B-->A,A-->C,非主属性C传递依赖于候选键B

②但其不满足第二个条件,第二个条件是A不能推出B,但是这里A能推出B

所以不满足第2个条件,这里也不是2NF,需要非常注意,这里至少为3NF

由于依赖项的左边都是候选键,所以其最高为BCNF范式

总结:

从1NF--->2NF-->3NF-->BCNF条件是越来越严苛的

若存在非主属性部分依赖于候选键,为1NF

在非主属性全部依赖于候选键的基础上,若满足传递依赖的两个条件,则为2NF

不满足传递依赖的任意条件的基础上,若依赖项左边不全为候选键,则为3NF

不满足传递依赖的任意条件的基础上,若依赖项左边全为候选键,则为BCNF

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐