属性的分类
R(A1,A2,…,An)和函数依赖集F,属性分4类
L类:仅出现在F的函数依赖左部的属性
R类:仅出现在F的函数依赖右部的属性
N类:在F的函数依赖两边均未出现的属性
LR类:在F的函数依赖两边均出现的属性
预备知识:
对于给定的关系模式R及其函数依赖集F,
1.如果X(X∈R)是L类属性,则X必为任一候选码的成员。更进一步,如果X关于F的闭包包含了R的全部属性,则X必为R的唯一候选码。(由此可见一些题目的候选码并不唯一)
2.如果X是R类属性,则X不在任何候选码中。
3.如果X是N类属性,则X必定在任一候选码中。正因为X是N类属性在F的函数依赖两边都不出现,所以N类和L类组成的函数集关于F的闭包才能包含R的全部属性,即如果N类和L类组成的函数集关于F的闭包包含R的全部属性,则X必为唯一候选码。
候选码求解的方法:
(1).找出L类属性和N类属性 例如:AB
然后判断AB关于F的闭包是否包含R的全部属性,若包含,则AB必为唯一的候选码,后面的都不用看了
(2).找出LR类属性 例如 C,D
(3).将1和2中找到的属性进行组合,例如 ABC和ABD
然后分别求其闭包,如果包含R的全部属性,即为候选码。如果都包含的话,则都是候选码。(也就是候选码不唯一)
例题:
(1).R(X,Y,Z) F=(XY→Z)
首先找出L类属性XY,无N类属性,
求XY关于F的闭包为XYZ,包含R的全部属性,
则R的候选码为XY
(2).R(X,Y,Z) F=(Y→Z,XZ→Y)
L类属性:X,无N类属性,
求X关于F的闭包为X,不包含R的全部属性,
继续找LR类属性:Y、Z
XY关于F的闭包为XYZ,包含R的全部属性
XZ关于F的闭包为XYZ,包含R的全部属性
所以R的候选码为XY和XZ.(R中所有属性X,Y,Z都是主属性)
(3).R(X,Y,Z) F=(Y→Z,Y→X,X→YZ)
无L类属性,无N类属性,
继续找LR类属性:X、Y、Z
X关于F的闭包为XYZ,包含R的全部属性
Y关于F的闭包为XYZ,包含R的全部属性
Z关于F的闭包为Z,不包含R的全部属性
所以R的候选码为X和Y.
(4).R(X,Y,Z) F=(X→Y,X→Z)
L类属性:X,无N类属性,
X关于F的闭包为XYZ,包含R的全部属性
所以R的候选码为X.
(5).R(W,X,Y,Z) F=(X→Z,WX→Y)
L类属性:WX,无N类属性,
WX关于F的闭包为WXYZ,包含R的全部属性
所以R的候选码为WX.
(6).R(W,X,Y,Z) F=(X→Z,X→Y)
L类属性:X,N类属性:W,
WX关于F的闭包为WXYZ,包含R的全部属性
所以R的候选码为WX.