一般用fc表示。具有如下性質:
正則覆蓋結果不唯一。
其中的乙個方法:
把右部分化為單屬性
去掉左部分的冗餘屬性
比如ab->c
假設a冗餘,那麼看是否b+包含c
假設b冗餘,…
去掉冗餘的函式依賴
合併函式依賴
簡單例子:
模式(a,b,c)上的函式依賴集f:
a->bc
b->c
a->b
ab->c
把右部分化為單屬性後
a->b
a->c
b->c
ab->c
去掉左邊冗餘屬性後,
a->b
a->c
b->c
去掉冗餘函式依賴後
a->b
b->c
合併a->b
b->c
即得正則覆蓋
關係模式r(a,b,c,d,e)的函式依賴集f:
a->bc
cd->e
b->d
e->a
右部分化為單屬性後,
a->b
a->c
cd->e
b->d
e->a
去掉左邊冗餘屬性
a->b
a->c
cd->e
b->d
e->a
去掉冗餘函式依賴
a->b
a->c
cd->e
b->d
e->a
合併a->bc
b->d
cd->e
e->a
函式依賴集f:a->bcd,bc->de,b->d,d->a
右部分化為單一屬性
a->b,
a->c,
a->d
bc->d,
bc->e
b->d
d->a
去掉左部冗餘屬性以及冗餘函式依賴
a->b,
a->c,
b->d,
d->a
b->e(由bc->e得出,b+=bdace)
合併a->bc
d->a
b->ed
關係模式r
lhsa:屬性只出現在函式依賴集中的左部分。
rhsa:屬性只出現在函式依賴集中的右部分。如a->bc,則b和c為rhsa
lrsh:出現在左右部分的。
nona:沒有出現在函式依賴集中屬性的集合。
構造lhsa和nona集合,構成並集x。如果x的閉包為u,則完畢。否則執行2
對於lrsh中每個屬性a,如果ax的閉包是u,加到答案中且lrsh-
對於lrsh中的每兩個屬性z,如果zx的閉包是u,加到答案中。
對於lrsh中每3個,每4個。。。。屬性z,如果zx的閉包是u,加到答案中.
例子:u=,f=
lhsa=,nona=,顯然a的閉包不是候選碼
lrsh=,由於ab,ac,ae的閉包都是u,所以都是候選碼。此時lrsh為空,結束
故候選碼為ab,ac,ae.
設關係模式r=(a,b,c,d,e,f),
函式依賴集f=,求r 的候選碼
lhsa=, rhsa=
觀察ad,bd,ce,ed ,得到ad的閉包為r. 去掉a之後的lrsa=
觀察bcd,bed,ced,得到 bcd,bed的閉包為r
觀察bced,他的閉包是r,但由於包含候選碼bcd,bed,所以他是個超碼,去掉
得到候選碼為ad,bcd,bed
候選碼練習
1.左邊集合為,右邊集合為。可知bd只在左邊出現,一定為候選碼的一部分,bd bd g只在右邊出現,一定不在候選碼中。2.bd與a組合,求abd的閉包 abd abd ab c abd abcd cd e abd abcde a g abd abcdeg u,因此abd為候選碼 bd與c組合,求bc...
碼 主碼 候選碼辨析
三者定義 碼 表中的某個屬性組,它可以唯一確定乙個元組。候選碼 若關係中某一屬性組的值能唯一的標識乙個元組,則稱該屬性組為候選碼。主碼 若乙個關係有多個候選碼,擇選其中乙個為主碼。候選碼中的所有屬性都是必須的,即只有這些屬性在一起時才能確定下乙個元組,而碼卻沒有最少屬性的要求。例如在學生表s中有如下...
求候選碼,3NF與BNCF分解
求候選碼 關係模式r lhsa 屬性只出現在函式依賴集中的左部分。rhsa 屬性只出現在函式依賴集中的右部分。如a bc,則b和c為rhsa lrsh 出現在左右部分的。nona 沒有出現在函式依賴集中屬性的集合。構造lhsa和nona集合,構成並集x。如果x的閉包為u,則完畢。否則執行 對於lrs...