-
设关系模式R 的分解ρ = (R1,…,Rk ) mρ(r)=πRi(r)连接 ;如果r = mρ(r)那么就称ρ为R的无损分解。
无损分解的检验算法:输入:关系模式 R = A1 A2 …An ,函数依赖集合F,分解ρ = (R1,R2 …Rk)
方法:1、构造k行n列的表,如果Aj 属于Ri 就在对应的二维表格处填写aj否则填写bij ;
2、对于任意 β->γ in F ,修改表,即如果β的属性相同的行,γ属性同样相同。
3、修改表的过程中,若发现某一行全部为a1…an,则为无损连接。
我们一般是将一张表分解为2个,假设R分解为R1,R2 检验:若R1∩R2 ->R1 - R2 或者R2-R1 属于F+ 则ρ关于F无损连接。 -
设关系模式R,分解为ρ = (R1,…Rk)函数依赖为F。如果F中任何β->γ ,有β、γ属于Ri,则 有分解ρ保持依赖分解。
知识:属性闭包:x+ 表示 {Ai| x 通过依赖F->Ai} 利用属性闭包可以判断一个依赖x->y是否属于某个依赖集合F 方法只需判断y是否属于x+。而这里同样需要判断各个子模式形成的函数依赖G是否包含了F的任何依赖。
检验算法:对于F中的任一依赖β->γ;
result = β;
while(result 变化)
for i ->k do
result = result ∪ ((result ∩ Ri)+ ∩ Ri)
如果 γ属于 result 那么β-> γ属于G