關系數據庫設計理論(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的函數依賴集
ρ={R 1<U 1,F 1>, R 2<U 2,F 2>,…,R k<U k,F k>}
         是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})
           ρ是無損分解,但不具有函數依賴保持性

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM