赞
踩
话不多说,举例说明一切:
设关系模式R(U,F),其中U={A,B,C,D,E},F={A→B,DE→B,CB→E,E→A,B→D}
1、求候选关键字:
只出现在左边的L属性集合:C
只出现在右边的R属性集合:无
左右两边都未出现的N属性集合:无
左右两边都出现过的LR属性集合:A,B,D,E
判断顺序,首先判断N有没有,若有,则N的成员一定为候选关键字之一;例题中没有,跳过;
然后R中有没有,若有,则R中成员一定不是候选关键字之一,直接排除掉;例题中没有,跳过;
然后是L中,L的属性成员一定属于候选关键字属性;
接下来求L的属性闭包,若闭包=U,则不需要做其他操作,该属性一定是唯一候选关键字;
例题中L的属性只有C,C就是候选关键字之一,C的闭包可以看出,无法推出任何其他元素,则C不是唯一的候选关键字,需要继续进行下面的步骤;
第三,用L中属性与LR属性一一拼接,分别求闭包,结果等于R的即为候选关键字;注意,此步骤算出来的候选关键字可能是多个;例题中,分别拼接得到的是AC,BC,CD,CE四个,分别求闭包:
AC的闭包为:首先有A和C,然后A→B,则有B;B→D,则有D;因为有了B,则可以BC→E,则有E,至此ABCDE都推出来了,等于了U中所有属性,固AC是一个候选关键字;
BC的闭包为:首先有B和C,然后B→D,则有D;BC→E,则有E;E→A,则有A;固BC也是一个候选关键字;
CD的闭包为:首先有C和D,然后就没有然后了;因为单独的C和单独的D、以及CD的组合不能在F的关系依赖中推导出任何其他的属性,固CD的闭包就是C,D;CD不是一个候选关键字;
CE的闭包为:首先有C和E,E→A,则有A;A→B,则有B;B→D,则有D;固CE也是一个候选关键字。
PS:注意,如果L属性中有两个属性,要算一下这两个属性合集的闭包是不是满足唯一候选关键字的需求。如果是,则不需要再计算其他步骤。
综上,总结关于计算候选关键字的理论知识:
一:对于给定的关系模式R及其函数依赖集F,若X(X属于R)是L类属性,则X必为R的任一候选关键字的成员。-
二:对于给定的关系模式R及其函数依赖集F,若X(X属于R)是L类属性,且X+包含了R的全部属性,则X必为R的唯一候选关键字。
三:对于给定的关系模式R及其函数依赖集F,若X(X属于R)是R类属性,则X不在任何候选关键字中。
四:对于给定的关系模式R及其函数依赖集F,若X(X属于R)是N类属性,则X必为R的任一候选关键字的成员。
五:对于给定的关系模式R及其函数依赖集F,若X(X属于R)是N类和L类组成的属性集,且X+包含了R的全部属性,则X必为R的唯一候选关键字。
---------------------------------------此为分割线---------------------------------------------------------------------------
那么,我们计算出了候选关键字之后,并不足够,很多时候还需要我们计算关系的无损连接的分解,并保持函数依赖:
首先,记住:无损连接的分解结果不唯一!取决于你先分解哪一个关系式!
第二,如果是个选择题,那么,选项中,分解后的关系模型中如果有候选关键字的选项,直接可以排除。比如,有个选项是ρ={ R1(AC),R2(E),R3(DB)},这个里面有AC关系是候选关键字,则这个选项不可能是无损链接,直接排除。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。