資料庫系統概論——求最小函數依賴集

來源:互聯網
上載者:User

定義:如果函數依賴集f滿足下列條件,則稱f為最小函數依賴集或最小覆蓋。

  ① f中的任何一個函數依賴的右部僅含有一個屬性;
  ② f中不存在這樣一個函數依賴x→a,使得f與f-{x→a}等價;
  ③ f中不存在這樣一個函數依賴x→a,x有真子集z使得f-{x→a}∪{z→a}與f等價。

或者表述為:

    最小依賴集:如果函數集合F滿足以下三個條件:
    ①F中每個函數依賴的右部都是單屬性;
    ②F中的任一函數依賴X→A,其F-{X→A}與F是不等價的;
    ③F中的任一函數依賴X→A,Z為X的子集。(F-{X→A}∪{Z→A}與F不等價。則稱F為最小函數依賴集合,記為Fmin。

    演算法:計算最小函數依賴集。

  輸入 一個函數依賴集

  輸出 f的一個等價的最小函數依賴集g

  步驟:① 用分解的法則,使f中的任何一個函數依賴的右部僅含有一個屬性;
     ② 去掉多餘的函數依賴:從第一個函數依賴x→y開始將其從f中去掉,然後在剩下的函數依賴中求x的閉包x+,看x+是否包含y,若是,則去掉x→y;否則不能去掉,依次做下去。直到找不到冗餘的函數依賴;
     ③ 去掉各依賴左部多餘的屬性。一個一個地檢查函數依賴左部非單個屬性的依賴。例如xy→a,若要判y為多餘的,則以x→a代替xy→a是否等價。若a屬於(x)+,則y是多餘屬性,可以去掉。

  舉例:已知關係模式r<u,f>,u={a,b,c,d,e,g},f={ab→c,d→eg,c→a,be→c,bc→d,cg→bd,acd→b,ce→ag},求f的最小函數依賴集。

  解1:利用演算法求解,使得其滿足三個條件

  ① 利用分解規則,將所有的函數依賴變成右邊都是單個屬性的函數依賴,得f為:f={ab→c,d→e,d→g,c→a,be→c,bc→d,cg→b,cg→d,acd→b,ce→a,ce→g}

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

  a.設ab→c為冗餘的函數依賴,則去掉ab→c,得:f1={d→e,d→g,c→a,be→c,bc→d,cg→b,cg→d,acd→b,ce→a,ce→g}

  計算(ab)f1+:設x(0)=ab

  計算x(1):掃描f1中各個函數依賴,找到左部為ab或ab子集的函數依賴,因為找不到這樣的函數依賴。故有x(1)=x(0)=ab,演算法終止。

  (ab)f1+= ab不包含c,故ab→c不是冗餘的函數依賴,不能從f1中去掉。

  b.設cg→b為冗餘的函數依賴,則去掉cg→b,得:f2={ab→c,d→e,d→g,c→a,be→c,bc→d,cg→d,acd→b,ce→a,ce→g}

  計算(cg)f2+:設x(0)=cg

  計算x(1):掃描f2中的各個函數依賴,找到左部為cg或cg子集的函數依賴,得到一個c→a函數依賴。故有x(1)=x(0)∪a=cga=acg。

  計算x(2):掃描f2中的各個函數依賴,找到左部為acg或acg子集的函數依賴,得到一個cg→d函數依賴。故有x(2)=x(1)∪d=acdg。

  計算x(3):掃描f2中的各個函數依賴,找到左部為acdg或acdg子集的函數依賴,得到兩個acd→b和d→e函數依賴。故有x(3)=x(2)∪be=abcdeg,因為x(3)=u,演算法終止。

  (cg)f2+=abcdeg包含b,故cg→b是冗餘的函數依賴,從f2中去掉。

  c.設cg→d為冗餘的函數依賴,則去掉cg→d,得:f3={ab→c,d→e,d→g,c→a,be→c,bc→d,acd→b,ce→a,ce→g}

  計算(cg)f3+:設x(0)=cg

  計算x(1):掃描f3中的各個函數依賴,找到左部為cg或cg子集的函數依賴,得到一個c→a函數依賴。故有x(1)=x(0)∪a=cga=acg。

  計算x(2):掃描f3中的各個函數依賴,找到左部為acg或acg子集的函數依賴,因為找不到這樣的函數依賴。故有x(2)=x(1),演算法終止。(cg)f3+=acg。

  (cg)f3+=acg不包含d,故cg→d不是冗餘的函數依賴,不能從f3中去掉。

  d.設ce→a為冗餘的函數依賴,則去掉ce→a,得:f4={ab→c,d→e,d→g,c→a,be→c,bc→d,cg→d,acd→b,ce→g}

  計算(cg)f4+:設x(0)=ce

  計算x(1):掃描f4中的各個函數依賴,找到左部為ce或ce子集的函數依賴,得到一個c→a函數依賴。故有x(1)=x(0)∪a=cea=ace。

  計算x(2):掃描f4中的各個函數依賴,找到左部為ace或ace子集的函數依賴,得到一個ce→g函數依賴。故有x(2)=x(1)∪g=aceg。

  計算x(3):掃描f4中的各個函數依賴,找到左部為aceg或aceg子集的函數依賴,得到一個cg→d函數依賴。故有x(3)=x(2)∪d=acdeg。

  計算x(4):掃描f4中的各個函數依賴,找到左部為acdeg或acdeg子集的函數依賴,得到一個acd→b函數依賴。故有x(4)=x(3)∪b=abcdeg。因為x(4)=u,演算法終止。

  (ce)f4+=abcdeg包含a,故ce→a是冗餘的函數依賴,從f4中去掉。

  ③ 去掉f4中各函數依賴左邊多餘的屬性(只檢查左部不是單個屬性的函數依賴)由於c→a,函數依賴acd→b中的屬性a是多餘的,去掉a得cd→b。

  故最小函數依賴集為:f={ab→c,d→e,d→g,c→a,be→c,bc→d,cg→d,cd→b,ce→g}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.