闭包就是由一个属性直接或间接推导出的所有属性的集合
以下是写的比较科学规范的闭包求解方法,设X和Y均为关系R的属性集的子集,F是R上的函数依赖集,若对R的任一属性集B,一旦X→B,必有B?Y,且对R的任一满足以上条件的属性集Y1 ,必有Y?Y1,此时称Y为属性集X在函数依赖集F下的闭包,记作X+。
计算关系R的属性集X的闭包的步骤如下:
第一步:设最终将成为闭包的属性集是Y,把Y初始化为X;
第二步:检查F中的每一个函数依赖A→B,如果属性集A中所有属性均在Y中,而B中有的属性不在Y中,则将其加入到Y中;
第三步:重复第二步,直到没有属性可以添加到属性集Y中为止。 最后得到的Y就是X+
闭包练习一:
设有关系模式R(U,F),其中U={A,B,C,D,E,I},F={A→D,AB→E,BI→E,CD→I,E→C},计算(AE)+
答案要点: (1) 令X={AE},X(0)=AE
(2)在F中寻找尚未使用过的左边是AE的子集的函数依赖,结果是: A→D,
E→C;所以 X(1)=X(0)DC=ACDE, 显然 X(1)≠X(0).
(3)在F中寻找尚未使用过的左边是ACDE的子集的函数依赖, 结果是: CD→I;所以X(2)=X(1)I=ACDEI。虽然X(2)≠X(1),但F中寻找尚未使用过函数依赖的左边已经没有X(2)的子集,所以不必再计算下去,即(AE)+=ACDEI。
闭包练习二:
答案要点:
- 令X={D} , X(0)=D -----1分 X(1)=DHG -----1分 X(2)=DHG -----1分 故D+=DHG。-----1分
- 令X={BG}, X(0)=BG, -----1分 X(1)=BGCE, -----1分 X(2)=BGCEA, -----1分 X(3)=BGCEAP, -----1分 X(4)=BGCEAPH=U, -----1分 故(BG)+= BGCEAPH。-----1分
闭包练习三:
已知关系模式R(A,B,C,D,E)和函数依赖集F={AB→C, B→D, C→E, EC→B, AC→B, D→BE}。试问AC→BE能否从F导出?请分别用两种方法进行计算:
1.运用推理规则推导;(4分)
2.求属性集AC关于函数依赖集F的闭包。(7分)
答案要点:
- 对已知的AC→B和B→D,根据传递规则,AC→D成立。------2分 对已证的AC→D和已知的D→BE,根据传递规则,AC→BE成立,即AC→BE能从F中导出。------2分
- 令X={AC}, X(0)=AC, -----1分 X(1)=ACEB, -----1分 X(2)=ACEBD, -----1分 X(3)=ACEBD=U, -----1分 故(AC)+= ACEBD。-----1分 因为BE(AC)+
,所以AC→BE能从F中导出。-----2分