函數依賴的閉包html
定義:若F爲關係模式R(U)的函數依賴集,咱們把F以及全部被F邏輯蘊涵的函數依賴的集合稱爲F的閉包,記爲F+。
即:F+={X→Y|X→Y∈F∨「應用Armstong公理從F中導出的任何X→Y」}
△ F包含於F+,若是F=F+,則F爲函數依賴的一個完備集。
△ 規定:若X爲U的子集,X→Φ 屬於F+。算法
關係模式R<U,F>如有n個屬性,則在模式R上可能成立的函數依賴有4n個,其中n個屬性中組合成X有2n個,組合成Y有2n個。閉包
例:已知關係模式R(ABC),F={A→C,B→C},求F+ide
解:∵U={A,B,C},左部不一樣的屬性集組合有23=8種:函數
Φ、A、B、C、AB、BC、AC、ABC。.net
(1)∴Φ→Φhtm
(2)∵(A)F+=ACblog
∴A→Φ、A→A、A→C、A→AC。get
(3)∵(B)F+=BCit
∴B→Φ、B→B、B→C、B→BC。
(4)∵(C)F+=C
∴C→Φ、C→C。
(5)∵(AB)F+=ABC
∴AB→Φ、AB→AB 、AB→A、AB→B 、AB→C、AB→BC 、AB→AC、AB→ABC 。
(6)∵(BC)F+=BC
∴BC→Φ、BC→BC、BC→B、BC→C。
(7)∵(AC)F+=BC
∴AC→Φ、AC→BC、AC→B、AC→C。
(8)∵(ABC)F+=ABC
∴ABC→Φ、ABC→ABC 、ABC→A、ABC→B 、ABC→C、ABC→BC 、ABC→AB、ABC→AC。
因此F+共有35個具體以下:
∴Φ→Φ、A→∅、A→A、A→C、A→AC
B→Φ、B→B、B→C、B→BC
C→Φ、C→C、 AB→∅、AB→AB 、AB→A、AB→B 、AB→C、AB→BC 、AB→AC、AB→ABC 、
BC→Φ、BC→BC、BC→B、BC→C、
AC→Φ、AC→BC、AC→B、AC→C、
ABC→Φ、ABC→ABC 、ABC→A、ABC→B 、ABC→C、ABC→BC 、ABC→AB、ABC→AC
轉載於:https://blog.csdn.net/xr_acmer/article/details/22893987
函數依賴集的閉包
F:FD的集合稱爲函數依賴集。
F閉包:由F中的全部FD能夠推導出全部FD的集合,記爲F+。
例1,對於關係模式R(ABC),F={A→B,B→C},求F+。
根據FD的定義,可推出F+={φ→φ,A→φ,A→A,A→B,A→C,A→AB,A→BC,A→ABC,…},共有43個FD。其中,φ表示空屬性集。
屬性集閉包
屬性集閉包定義 :
對F,F+中全部X→A的A的集合稱爲X的閉包,記爲X+。能夠理解爲X+表示全部X能夠決定的屬性。
屬性集閉包的算法:
A+:將A置入A+。對每一FD,若左部屬於A+,則將右部置入A+,一直重複至A+不能擴大。
超鍵、候選鍵
若X+包含R的全部屬性,則X是超鍵。當X不可約時則爲候選鍵。 如上例:A+=ABC,則A爲超鍵,由於A不可約則爲候選鍵。
設關係模式R中U=ABC.......等N個屬性,U中的屬性在FD中有四種範圍:
(1)左右出現;
(2)只在左部出現;
(3)只在右部出現;
(4)不在左右出現;
求候選鍵算法:
1.R:只在FD右部出現的屬性,不屬於候選碼;
2.L:只在FD左部出現的屬性,必定存在於某候選碼當中;
3.N:外部屬性必定存在於任何候選碼當中;
4.其餘屬性逐個與2,3的屬性組合,求屬性閉包,直至X的閉包等於U,若等於U,則X爲候選碼。
例2,對於關係模式R(ABCD),F={A→B,B→C,D→B},求其候選鍵。
先按照屬性集閉包的算法,求各個閉包,而後求得候選鍵。
(1) 求A+。
① A+=A。
② 由A→B,而A €A+可知,則A+=AB。
③ 由B→C,而B A+可知,則A+=ABC。
④ A+封閉,即A+=ABC。
(2) 求B+、C+、D+。
按步驟(1)可得:B+=BC,C+=C,D+=BCD。
(3) 求其候選鍵。 顯然,R的候選鍵爲AD。
例3,對於關係模式R(ABC),F={A→BC,BC→A},求其候選鍵。
(1) 求屬性的閉包。
按例2可得:A+=ABC,B+=B,C+=C。
(2) 求屬性集的閉包。
由BC→A,則(BC)+=ABC,其他屬性集閉包爲屬性閉包的並集。
(3) 求其候選鍵。 顯然,R的候選鍵爲A和BC。
最小函數依賴集
定義:若是函數依賴集F知足如下條件,則稱F爲一個極小函數依賴集。也稱爲最小依賴集或最小覆蓋。
(1)F中任一函數依賴的右部僅含有一個屬性。
(2)F中不存在這樣的函數依賴X→A,使得F與F-{X→A}等價。
(3)F中不存在這樣的函數依賴X→A,X有真子集Z使得F-{X→A}U{Z→A}與F等價。
最小依賴集通用算法:
① 用分解的法則,使F中的任何一個函數依賴的右部僅含有一個屬性;
② 去掉多餘的函數依賴:從第一個函數依賴X→Y開始將其從F中去掉,而後在剩下的函數依賴中求X的閉包X+,看X+是否包含Y,如果,則去掉X→Y;不然不能去掉,依次作下去。直到找不到冗餘的函數依賴;
③ 去掉各依賴左部多餘的屬性。一個一個地檢查函數依賴左部非單個屬性的依賴。例如XY→A,若要判Y爲多餘的,則以X→A代替XY→A是否等價?若A屬於(X)+,則Y是多餘屬性,能夠去掉。
例四、求F={A→B,B→A,B→C,A→C,C→A},最小(極小)函數依賴集合
一、利用分解規則,將全部的函數依賴變成右邊都是單個屬性的函數依賴。從題目來看,F中的任何一個函數依賴的右部僅含有一個屬性:
{A→B,B→A,B→C,A→C,C→A}
二、去掉F中多餘的函數依賴
(1)設A→B冗餘,從F中去掉A→B,則F1={B→A,B→C,A→C,C→A}。計算(A)F1+:設X(0)=A,計算X(1):掃描F1中各個函數依賴,找到左部爲A或A子集的函數依賴,A→C。故有X(1)=X(0)U C=AC;掃描F1中各個函數依賴,找到左部爲AC或爲AC子集的函數依賴,C→A,X(2)=X(1)U C=AC.但AC不包含B,故A->B不能從F中去掉。
(2)設B→A冗餘,從F中去掉B→A,則F2={A→B,B→C,A→C,C→A}。計算(B)F2+:設X(0)=B,計算X(1):掃描F2中各個函數依賴,找到左部爲B或者B子集的函數依賴,B→C.故有X(1)=X(0)U C =BC;掃描F2中各個函數依賴,找到左部爲BC或爲BC子集的函數依賴,C->A,X(2)=X(1)U A=ABC.X(2)包含全部屬性,故B→A可從F中去掉。
(3)設B→C冗餘,從F中去掉B→C,則F3={A→B,A→C,C→A}。計算(B)F3+:掃描F3中各個函數依賴,找不到左部爲B或B子集的函數依賴,由於找不到這樣的函數依賴,故有X(1)=X(0)=B,(B)F1+= B不包含C,故B→C不是冗餘的函數依賴,不能從F1中去掉。
(4)設A→C冗餘,從F中去掉A→C,則F4={A→B,B→C,C→A}。計算(A)F4+:設X(0)=A,計算X(1):掃描F4中各個函數依賴,找到左部爲A或A子集的函數依賴,A→B。故有X(1)=X(0)U B=AB;掃描F4中各個函數依賴,找到左部爲AB或爲AB子集的函數依賴,B→C,X(2)=X(1)U C=ABC.X(2)包含全部屬性,故A→C可從F中去掉。
(5)設C→A冗餘,從F中去掉C→A,則F4={A→B,B→C}。計算(C)F5+:設X(0)=C,計算X(1):掃描F5中各個函數依賴,找到左部爲C或C子集的函數依賴,找不到左部爲C或C子集的函數依賴,由於找不到這樣的函數依賴,故有X(1)=X(0)=C,(B)F1+= C不包含A,故C→A不是冗餘的函數依賴,不能從F中去掉。
(6)至此,全部依賴均以驗算完畢,故F最小(極小)函數依賴集合爲:{A→B,B→C,C→A}