依赖关系-根据依赖关系求候选码
关系模式R(U, F), U={},F是R的函数依赖集,可以将属性分为4类:
L: 仅出现在依赖集F左侧的属性
R: 仅出现在依赖集F右侧的属性
LR: 在依赖集F左右侧都出现的属性
NLR: 在依赖集F左右侧都未出现的属性
结论1: 若X是L类属性,则X必为R的任一候选码成员。若, 则X必为R的唯一候选码。
结论2: 若X是R类属性,则X不是R的任一候选码成员。
结论3: 若X是NLR类属性,则X必为R的任一候选码成员。
结论4: 若X是L类和NLR类属性组成的属性集,若, 则X必为R的唯一候选码。
那么,怎样求属性的闭包呢?
例如:已知关系模式R(U,F), U=(A,B,C,D,E), F={A->B, D->C, BC->E, AC->B}, 求
根据算法:
设X(0)=AE 逐一扫描F中的各个函数依赖,找出F中左侧为AE或者AE子集的函数依赖为A->B, 故有X(1)=AE∪B = ABE
计算X(2), 逐一扫描F中的各个函数依赖,找出F中左侧为ABE或者ABE子集的函数依赖为A->B(前面已经并过,没有意义), 未找到。=ABE≠U,因此AE不是关系R的候选码。
计算X(n), 找不到算法终止,或者=U,则算法终止。