二、轉換成3NF的保持函數依賴的分解

 

轉換成3NF的保持函數依賴的分解

==================================================

算法2:

    

 

 ===================================================================   

 例1:關係模式R<U,F>,其中U={C,T,H,R,S,G},

F={CS→G,C→T,TH→R,HR→C,HS→R},將其分解成3NF並保持函數依賴。

解:根據算法進行求解     

(一)計算F的最小函數依賴集

      ① 利用分解規則,將所有的函數依賴變成右邊都是單個屬性的函數依賴。由於F的所有函數依賴的右邊都是單個屬性,故不用分解。

      ② 去掉F中多餘的函數依賴

      A.設CS→G爲冗餘的函數依賴,則去掉CS→G,得:

      F1={C→T,TH→R,HR→C,HS→R}

      計算(CS)F1+:

      設X(0)=CS

      計算X(1):掃描F1中各個函數依賴,找到左部爲CS或CS子集的函數依賴,找到一個C→T函數依賴。故有X(1)=X(0)∪T=CST。

      計算X(2):掃描F1中的各個函數依賴,找到左部爲CST或CST子集的函數依賴,沒有找到任何函數依賴。故有X(2)=X(1)。算法終止。

      (CS)F1+= CST不包含G,故CS→G不是冗餘的函數依賴,不能從F1中去掉。

      B.設C→T爲冗餘的函數依賴,則去掉C→T,得:

      F2={CS→G,TH→R,HR→C,HS→R}

      計算(C)F2+:

      設X(0)=C

      計算X(1):掃描F2中的各個函數依賴,沒有找到左部爲C的函數依賴。故有X(1)=X(0)。算法終止。故C→T不是冗餘的函數依賴,不能從F2中去掉。

      C.設TH→R爲冗餘的函數依賴,則去掉TH→R,得:

      F3={CS→G,C→T,HR→C,HS→R}

      計算(TH)F3+:

      設X(0)=TH

      計算X(1):掃描F3中的各個函數依賴,沒有找到左部爲TH或TH子集的函數依賴。故有X(1)=X(0)。算法終止。故TH→R不是冗餘的函數依賴,不能從F3中去掉。

      D.設HR→C爲冗餘的函數依賴,則去掉HR→C,得:

      F4={CS→G,C→T,TH→R,HS→R}

      計算(HR)F4+:

      設X(0)=HR

      計算X(1):掃描F4中的各個函數依賴,沒有找到左部爲HR或HR子集的函數依賴。故有X(1)=X(0)。算法終止。故HR→C不是冗餘的函數依賴,不能從F4中去掉。

      E.設HS→R爲冗餘的函數依賴,則去掉HS→R,得:

      F5={CS→G,C→T,TH→R,HR→C}

      計算(HS)F5+:

      設X(0)=HS

      計算X(1):掃描F5中的各個函數依賴,沒有找到左部爲HS或HS子集的函數依賴。故有X(1)=X(0)。算法終止。故HS→R不是冗餘的函數依賴,不能從F5中去掉。即:F5={CS→G,C→T,TH→R,HR→C,HS→R}

      ③ 去掉F5中各函數依賴左邊多餘的屬性(只檢查左部不是單個屬性的函數依賴),沒有發現左邊有多餘屬性的函數依賴。

故最小函數依賴集爲:F={CS→G,C→T,TH→R,HR→C,HS→R}

(二)由於R中的所有屬性均在F中都出現,所以轉下一步。     

(三)對F按具有相同左部的原則分爲:

R1=CSG,R2=CT,R3=THR,R4=HRC,R5=HSR。

所以ρ={R1(CSG),R2(CT),R3(THR),R4(HRC),R5(HSR)}。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章