求候选键/候选码要先会求闭包,如果不会可以参考我的这篇文章

下面给出一个方法,我称它为“LRN法”。

对于给定的关系R(A1,A2,…, An)和函数依赖集F,可将其属性分为四类:

L类:仅出现在F的函数依赖左部的属性;

R类:仅出现在F的函数依赖右部的属性;

N类:在F的函数依赖左右两边均未出现的属性;

LR类:在F的函数依赖左右两边均出现的属性。

这里还有几个定理,非常有用(我一般用定理1/2/3和推论1)。

定理1:对于给定的关系模式R及其函数依赖集F,若X(X属于R)是L类属性,则X必为R的任一候选关键字的成员

推论1:对于给定的关系模式R及其函数依赖集F,若X(X属于R)是L类属性,且X+包含了R的全部属性,则X必为R的唯一候选关键字

定理2:对于给定的关系模式R及其函数依赖集F,若X(X属于R)是R类属性,则X不在任何候选关键字中。

定理3:对于给定的关系模式R及其函数依赖集F,若X(X属于R)是N类属性,则X必为R的任一候选关键字的成员

推论2:对于给定的关系模式R及其函数依赖集F,若X(X属于R)是N类和L类组成的属性集,且X+包含了R的全部属性,则X必为R的唯一候选关键字

例:关系模式R(U,F),其中U={A,B,C},F={AB→C,C→A},试求此关系的候选键。

解:

第一步:用“LRN法”求出L、R、N、LR各有哪些元素。一般都是先写N、LR,再写L、R。防止冲突。

L:B

R:none

N:none

LR:A,C

第二步:

先求B的闭包(B)+ 。发现就是{B}。所以B不符合,于是要和LR里的元素组合。

再求(AB)+=ABC=U,所以AB是候选键。

再求(BC)+=ABC=U,所有BC也是候选键。

于是:候选键为AB,BC。

这里总结一下解题套路

第一步:用“LRN法”求出L、R、N、LR各有哪些元素。

第二步:根据三个定理、两个推论,一般都是先求L中元素的闭包。如果是U,则符合推论1,候选码唯一。如果不是U,这时就要并上LR中的元素,继续求闭包,一般都是两两组合。然后如果其中有一组闭包是U,其他一组不是U,那就不用再三个组合了,因为这样会产生冗余,除非三个一组里面不包含前面求到的闭包是U的两个元素。

版权声明:本文为博主原创文章,未经博主允许不得转载。