关系数据库设计理论(4) 关系模式的分解

一、关系模式的分解


      1、把一个关系模式分解成若干个关系模式的过程,称为关系模式的分解

      2、定义

             关系模式R<U,F>的分解是指R为它的一组子集
          ρ={R1<U1,F1>, R2<U2,F2>,…, Rk<Uk,Fk>}所代替的过程。
          其中U=U1∪U2∪...∪k ,并且没有Ui≤Uj(表Ui包含于Uj,1≤i,j≤k),
          Fi是F在Ui上的投影,即Fi={X→Y∈F+∧XY≤Ui}(表XY包含于Ui)。

      4.4.1:
          将R=(ABCD,{A→B,B→C,B→D,C→A})分解为
          关于U1=AB,U2=ACD两个关系,求R1,R2


      解:
          R1=(AB,{A→B,B→A})
          R2=(ACD,{A→C,C→A,A→D})

      3、关系模式分解必须遵守两个准则
       (1)无损联接性:信息不失真(不增减信息)。
       (2)函数依赖保持性:不破坏属性间存在的依赖关系。

第四节 关系模式的分解

 

 
  二、分解的无损联接性

      1、定义

              设F是关系模式R的函数依赖集
ρ={R1<U1,F1>, R2<U2,F2>,…,Rk<Uk,Fk>}
         是R的一个分解,


             如果R的满足F的任一个关系r均有:r=m
ρ(r),
         则称分解ρ具有无损联接性

      2、引理
             设ρ={R1<U1,F1>, R2<U2,F2>,…,Rk<Uk,Fk>}
         为关系模式R的一个分解,r为R的任一个关系,riUi(r),
             则:
         ① r≤m
ρ(r)(表r包含于mρ(r))
         ② 如果s=m
ρ(r) ,则πUi(s)=ri
         ③ m
ρ(mρ(r))=mρ(r)

             证:
         ①设t为关系r的任一元组,ti=t[ui]∈ri(i=1,2,…,k),
           根据自然连接的定义,t1,t2,…,tiπUi(r),即t∈m
ρ(r),
           所以有r≤mρ(r)(表包含于mρ(r))。
         ②、③的证明参看P121。

             结论:分解后的关系做自然联接必包含分解前的关系,
         即分解不会丢失信息,但可能增加信息,
         只有r=
mρ(r)时,分解才具有无损联接性。

     
4.4.2:ρ(r),由此可得到什么结论?
      解:

           结论:分解不具有无损联接性。

      3、为什么要进行关系分解
             一个关系模式分解后,可以存放原来所不能存放的信息,
         通常称为“悬挂”的元组,这是实际所需要的,正是分解的优点
         在做自然联接时,这类悬挂元组自然丢失了,
         但不是信息的丢失,而是合理的。

        

              

      4、检验分解无损联接性的算法
             设有关系模式R(A1,A2,…,An), F为它的函数依赖集,
         ρ={R1,R2,…,Rk}为R的一个分解。

         算法

          (1)构造初始表
                 构造一个k行n列的初始表,其中每列对应于R的一个属性,
             每行用于表示分解后的一个模式组成。
             如果属性Aj属于关系模式Ri, 则在表的第一i行第j列置符号aj
             否则置符号bij

          (2)根据F中的函数依赖修改表内容
                 考察F中的每个函数依赖X→Y,在属性组X所在的那些列上
             寻找具有相同符号的行,如果找到这样的两行或更多的行,
             则修改这些行,则使这些行上属性组Y所在的列上元素相同。
                 修改规则是:如果y所在的要修改的行中有一个为aj
             则这些元素均变成aj;否则改动为bmj(其中m为这些行的最小行号)。

          注意:若某个bij被改动,则该列中凡是与bij相同的符号均做相同的改动。
                循环地对F中的函数依赖进行逐个处理,直到发现表中有一行
                变为a1,a2,…an或不能再被修改为止。

          (3)判断分解是否为无损联接
                 如果通过修改,发现表中有一行变为a1,a2,…an
             则分解是无损联接的,否则分解不具有无损联接性。

        算法实现
            输入:关系R上的属性集U={A1,A2,…,Ak} , R上的函数依赖集F, 
                  R的分解ρ={R1,R2,…,Rk}。
            输出:如果ρ为无损分解则为真,否则为假。

        Lossless(R,F,ρ)
          { 构造初始表R
ρ
                       change=真;
             while (change)
              { for (F中的每个函数依赖X→Y)
                 { if(R
ρ中ti1[X]=ti2[X]=…=tim[X])
                     {将ti1[Y],ti2[Y]=,…,tim[Y]改为相同}
                   if (R
ρ中有一行为a1,a2,…an
                     {
return 真;}
                  }
                 if (修改后的表Rρ=修改前的表Rρ )
                    {chang=假;}
               }
             if (Rρ中有一行为a1,a2,…an{return 真;}
             else {return 假;}
           }

      例
4.4.3:关系模式R(SAIP),F={S→A,SI→P},ρ={R1(SA),R2(SIP)},
           检验分解是否为无损联接

    


           通过修改发现表中第二行元素变为a1,a2,…,an,分解是无损联接。

     
4.4.4:已知关系模式R(ABCDE)及函数依赖集F={A→C,B→C,C→D,DE→C,CE→A}
           验证分解ρ={R1(AD),R2(AB),R3(BE),R4(CDE),R5(AE)}是否为无损联接。

       

       

         

           通过修改发现表中第三行元素变为a1,a2,…,an,分解是无损联接。

      练习
4.4.1:
           已知关系模式R(U,F) ,
           U={SNO,CNO,GRADE,TNAME,TAGE,OFFICE},
           F={(SNO,CNO)→GRADE,CNO→TNAME,TNAME→(TAGE,OFFICE)},
           以及R上的两个分解 ρ1={SC,CT,TO}, ρ2={SC,GTO},
           其中SC={SNO,CNO,GRADE},CT={CNO,TNAME},TO={TNAME,TAGE,OFFICE},
           GTO={GRADE,TNAME,TAGE,OFFICE}。
           试检验ρ12的无损联接性

      答案ρ1是无损分解,ρ2不是无损分解。

      5、定理
4.4.1
             检验分解无损联接性的算法,能够正确判定一个分解
         是否具有无损联接性。(证明:参看课本P124)

      6、定理
4.4.2
             设ρ={R1, R2}是关系模式R的一个分解,F是R的函数依赖集,
         那么ρ是R(关于F)的无损分解的充分必要条件是:
         (R1∩R2)→R1-R2∈F+ 或 (R1∩R2)→R2-R1∈F+
         (证明:参看课本P124)

     
4.4.5:关系模式R(SAIP),F={S→A,SI→P},ρ={R1(SA),R2(SIP)}
          检验分解是否为无损联接?

      解:R1∩R2=SA∩SIP=S R1-R2=SA-SIP=A,S→A∈F,所以ρ是无损分解。

      7、定理
4.4.3(逐步分解定理——关系模式可以逐步进行分解)
         设F是关系模式R的函数依赖集,ρ={R1,R2,…,Rk}是R关于F的一个无损联接。

         分解:

      (1)若σ={S1,S2,…,Sm}是Ri关于Fi的一个无损联接分解,则
         ε={R1,…,Ri-1,S1,S2,…,Sm,Ri+1,…,Rk}是R关于F的无损联接分解。
         其中FiRi(F)。

      (2)设τ={R1,…,Rk,Rk+1,…,Rn}是R的一个分解,其中τ≥ρ(表τ包含ρ) ,
         则τ也是R关于F的无损联接分解。


第四节 关系模式的分解

 

有关系模式R(A,B,C), ρ={R1,R2}为它的一个分解,
          其中R1=AB,R2=BC,r为R的一个关系,r1R1(r),r2R2(r),
          r1,r2,m
 
  三、分解的函数依赖保持性


      1、定义
             设F是关系模式R的函数依赖集,
         ρ={R1<U1,F1>, R2<U2,F2>,…, Rk<Uk,Fk>}为R的一个分解,
         如果Fi=πRi(F)的并集(F1∪F2∪…∪Fk)≡F(i=1,2,…,k)
         则称分解ρ具有函数依赖保持性。

      2、例题与练习

     
4.4.6:将R=(ABCD,{A→B,B→C,B→D,C→A})分解为
          关于U1=AB,U2=ACD两个关系,求R1、R2
          并检验分解的无损联接性和分解的函数依赖保持性。

      解:F1=πR1(F)={A→B,B→A},
          F2=πR2(F)={A→C,C→A,A→D}
          R1=(AB,{A→B,B→A})
          R2=(ACD,{A→C,C→A,A→D})
          U1∩U2=AB∩ACD=A,
          U1-U2=AB-ACD=B,A→B∈F,
          所以ρ是无损分解
          F1UF2={A→B,B→A,A→C,C→A,A→D}≡{A→B,B→C,B→D,C→A}=F
          所以ρ是函数依赖保持性

     
4.4.7:关系模式R(A,B,C,D) 函数依赖集F={A→B,C→D},ρ={R1(AB),R2(CD)}
          求R1,R2 ,并检验分解的无损联接性和分解的函数依赖保持性。

      解:F1R1(F)={A→B},
          F2R2(F)={C→D}
          R1(AB,{A→B}),
          R2(Cd,{C→D})
          U1∩U2=AB∩CD=Φ,
          U1-U2=AB,
          U2-U1=CD,
          Φ→ABF,
          Φ→CDF,
          所以ρ不是无损分解

      练习
4.4.2:已知关系模式R(CITY,ST,ZIP), F={(CITY,ST)→ZIP,ZIP→CITY}
            以及R上的一个分解ρ={R1, R2}, R1 ={ST,ZIP}, R2 ={CITY,ZIP}
            求R1,R2 ,并检验分解的无损联接性和分解的函数依赖保持性。

      答案:R1=({ST,ZIP},{Φ}) R2=(CITY,ZIP,{ZIP→CITY})
           ρ是无损分解,但不具有函数依赖保持性

 

posted @ 2014-12-02 17:26  Net-Spider  阅读(8547)  评论(0编辑  收藏  举报