分两步
(1)看关系依赖集中每个依赖是否被包括在分解的任何一个模式中
(2)如果每个依赖都包含在分解的某个模式中,则结束算法,判断出保持了函数依赖
(3)如果第二部中某几个函数依赖并不包括在任一分解模式中则执行如下算法
对函数依赖α→β使用下面的过程:
result:=α;
while(result发生变化)do
for each 分解后的Ri
t=(result∩Ri)+ ∩Ri
result=result∪t
这里的属性闭包是在函数依赖集F下计算出来的。如果result中包含了β的所有属性,则函数依赖α→β。是呗保持的,如果所有的该判断依赖都保持的话,分解时保持函数依赖的。
例子:
R(A,B,C,D)
F={A->B,B->C,D->A}
模式分解为 R1(AD) R2(BC) R3(BD)
(1)显然 B->C,B->C包含在r1 r2中,D->A不包含在任一分解模式中
(2)对A->B运行算法二
reselt=A
(result∩R1)F+ ∩R1=空
result ∪空=A
result未变化结束循环,经过判断结果显然不包括B,所以对于分解R1不满足函数依赖
对R2 R3做同样算法,经过计算,同样不包含B,所以整个分解是不满足函数依赖的
欢迎大家指正