这里主要讨论基础考试选择题,判断一个分解是有损无损、是否保持函数依赖。
一、公式法
无损分解 ⇔ R1∩R2→(R1-R2)或R1∩R2→(R2-R1)
保持函数依赖 ⇔ (F1∪F2)+=F+
说明:这里的判断无损的→以及判断保持函数依赖的求闭包,可以使用Armstrong定理。
注:公式法最大的问题:判断无损时,如果分解超过3个以上,则无能为力。
二、希赛法
如上题,如果分解的结果集中,只要有一个集合,能够通过现有的函数依赖,还原成原来的集合,则无损。
关键:还原过程中,只能通过现有集合中的元素确定新元素加入,不能把新加入的元素再用来确定新元素。
保持依赖的判断。
如果F上的每一个函数依赖都在其分解后的某一个关系上成立,则这个分解是保持依赖的(这是一个充分条件)。
如果上述判断失败,并不能断言分解不是保持依赖的,还要使用下面的通用方法来做进一步判断。
该方法的表述如下:
算法二:
对F上的每一个α→β使用下面的过程:
result:=α;
while(result发生变化)do
for each 分解后的Ri
t=(result∩Ri)+ ∩Ri
result=result∪t