【Dongle】【数据库系统原理】模式分解之无损分解

定义

            无损分解指的是对关系模式分解时,原关系模型下任一合法的关系值在分解之后应能通过自然联接运算恢复起来,即未丢失信息的分解即无损分解。反之,则称为有损分解。

测试方法

基本步骤

       ρ={R11,F1>,R22,F2>,...,Rkk,Fk>}是关系模式R的一个分解,U={A1,A2,...,An}F={FD1,FD2,...,FDp},并设F是一个最小依赖集,记FDiXiAlj,其步骤如下:

       ① 建立一张nk行的表,每一列对应一个属性,每一行对应分解中的一个关系模式。若属性Aj Ui,则在ji行上真上aj,否则填上bij

      ② 对于每一个FDi做如下操作:找到Xi所对应的列中具有相同符号的那些行。考察这些行中li列的元素,若其中有aj,则全部改为aj,否则全部改为bmlim是这些行的行号最小值。

              如果在某次更改后,有一行成为:a1,a2,...,an,则算法终止。且分解ρ具有无损连接性,否则不具有无损连接性。FpFD逐一进行一次这样的处理,称为对F的一次扫描。

    ③ 比较扫描前后,表有无变化,如有化,返回第② ,否法终止。如果发生循环,那么前次扫描至少应使该表减少一个符号,表中符号有限,因此,循环必然终止。


示例


举例1

      已知RU={A,B,C}F={AB},如下的两个分解: ρ1={AB,BC}, ρ2={AB,AC},判断这两个分解是否具有无损连接性。

      ①因ABBC=BAB-BC=ABC-AB=C,所以BA ¢F+BC ¢F+ρ1是有损连接。

      ② 因为ABAC=AAB-AC=BAC-AB=C,所以AB F+AC ¢F+ρ2是无损连接。

 

举例2

       已知RU={A,B,C,D,E}F={AC,BC,CD,DEC,CEA}R的一个分解  为R1(AD)R2(AB)R3(BE)R4(CDE)R5(AE),判断这个分解是否具有无损连接性。

         构造一个初始的二维表,若“属性”属于“模式”中的属性,则填aj,否则填bij

【Dongle】【数据库系统原理】模式分解之无损分解_第1张图片

        ② 根据AC,对上表进行处理,由于属性列A上第125行相同均为a1,所以将属性列C上的b13b23b53改为同一个符号b13(取行号最小值)。

【Dongle】【数据库系统原理】模式分解之无损分解_第2张图片

        ③ 根据BC,对上表进行处理,由于属性列B上第23行相同均为a2,所以将属性列C上的b13b33改为同一个符号b13(取行号最小值)。

【Dongle】【数据库系统原理】模式分解之无损分解_第3张图片

       ④ 根据CD,对上表进行处理,由于属性列C上第1235行相同均为b13,所以将属性列D上的值均改为同一个符号a4

【Dongle】【数据库系统原理】模式分解之无损分解_第4张图片

       ⑤ 根据DEC,对上表进行处理,由于属性列DE上第345行相同均为a4a5,所以将属性列C上的值均改为同一个符号a3

【Dongle】【数据库系统原理】模式分解之无损分解_第5张图片

        ⑥ 根据CEA,对上表进行处理,由于属性列CE上第345行相同均为a3a5,所以将属性列A上的值均改为同一个符号a1

【Dongle】【数据库系统原理】模式分解之无损分解_第6张图片

         ⑦ 通过上述的修改,使第三行成为a1a2a3a4a5,则算法终止。且分解具有无损连接性。


你可能感兴趣的:(数据库,算法)