轉換成3NF的保持函數依賴的分解演算法:

來源:互聯網
上載者:User

標籤:

轉換成3NF的保持函數依賴的分解演算法:

ρ={R1<U1,F1>,R2<U2,F2>,...,Rk<Uk,Fk>}是關係模式R<U,F>的一個分解,U={A1,A2,...,An},F={FD1,FD2,...,FDp},並設F是一個最小依賴集,記FDi為Xi→Alj,其步驟如下:

① 對R<U,F>的函數依賴集F進行極小化處理(處理後的結果仍記為F);

② 找出不在F中出現的屬性,將這樣的屬性構成一個關係模式。把這些屬性從U中去掉,剩餘的屬性仍記為U;

③ 若有X→A€ F,且XA=U,則ρ={R},演算法終止;

④ 否則,對F按具有相同左部的原則分組(假定分為k組),每一組函數依賴Fi所涉及的全部屬性形成一個屬性集Ui。若Ui¢ Uj(i≠j),就去掉Ui。由於經過了步驟②,故,於是構成的一個保持函數依賴的分解。並且,每個Ri(Ui,Fi)均屬於3NF且保持函數依賴。

 

例1:關係模式R<U,F>,其中U={C,T,H,I,S,G},F={CS→G,C→T,TH→I,HI→C,HS→I},將其分解成3NF並保持函數依賴。

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

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

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

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

F1={C→T,TH→I,HI→C,HS→I}

計算(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→I,HI→C,HS→I}

計算(C)F2+:

設X(0)=C

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

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

F3={CS→G,C→T,HI→C,HS→I}

計算(TH)F3+:

設X(0)=TH

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

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

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

計算(HI)F4+:

設X(0)=HI

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

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

F5={CS→G,C→T,TH→I,HI→C}

計算(HS)F5+:

設X(0)=HS

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

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

沒有發現左邊有多餘屬性的函數依賴。故最小函數依賴集為:

F={CS→G,C→T,TH→I,HI→C,HS→I}

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

(三)對F按具有相同左部的原則分為:R1=CSG,R2=CT,R3=THI,R4=HIC,R5=HSI。所以ρ={R1(CSG),R2(CT),R3(THI),R4(HIC),R5(HSI)}。

聲名:本文轉載自百度文庫

http://wenku.baidu.com/link?url=MUYZ--karIERpPnbvYAa5mb5f6LGCTtR41OFmv8lEMCivO96FmQ-ZbYtETZF-BlEw1Um6a3Bkb0qkxWE7d3AR9dyFsew-_HtMftPcbl0qli

轉換成3NF的保持函數依賴的分解演算法:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.