关系数据理论(二)求候选码 -----“LRN法”
对于给定的关系R(A1,A2,…, An)和函数依赖集F,可将其属性分为四类:
L类:仅出现在F的函数依赖左部的属性; R类:仅出现在F的函数依赖右部的属性; N类:在F的函数依赖左右两边均未出现的属性; LR类:在F的函数依赖左右两边均出现的属性。
几个有用的定理和推论:
定理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的两个元素。