對於給定的關係模式R(A,A1,A2,…,An)和函數依賴集F,可以把屬性分爲以下四類
- L類:僅出現在F中的函數依賴左邊的左部屬性
- R類:僅出現在F的函數依賴右邊右部屬性
- N類:在F的函數依賴左右邊均未出現的屬性
- LR類:在F的函數依賴左右兩邊均出現的屬性
對於給定的關係模式R及其函數依賴集F,有以下結論
- 若X(X ∈ R)是L類屬性,則X必爲R的任一候選碼的成員
- 若X(X ∈ R)是L類屬性,且X+包含了R的全部屬性,則X必爲R的唯一候選碼
- 若X(X ∈ R)是R類屬性,則X不在任何候選碼中
- 若X(X ∈ R)是N類屬性,則X必爲R的任一候選碼成員
- 若X(X ∈ R)是R的N類和L類屬性組成的屬性集,且X+包含了R的全部屬性,則X是R的唯一候選碼
- 若X(X ∈ R)是LR類屬性屬性,則X可能爲R的任一候選碼的成員,也可能不爲R的任一候選碼成員
上面的內容過了一遍後,我們來用例子講解
關係模式R(A,B,C,D,E),函數依賴F(A→D,E→D,D→B,BC→D,CD→A),求R的候選碼
- 首先把屬性分類
由函數依賴F知:
L類的屬性有C、E;
R類的屬性沒有;
N類的屬性沒有;
LR類的屬性有:A、B、D。
- 設X代表L、N類屬性,Y代表LR類屬性
令{C,E} ∈ X,{A、B、D} ∈ Y
- 求X+
因爲C→∅,所以C+ = ∅
因爲E → D,所以E+ = {DE};又因爲D→B,所以 E+ = {BDE}
因爲E → D,所以(CE)+= {CDE};又因爲D→B,所以 (CE)+ = {BCDE};又因爲CD → A,所以(CE)+ = {ABCDE}
故CE爲R的唯一候選碼
注意:如果X+中沒有R的全部屬性,即從Y中拿出一個屬性來和X中的屬性組合
假設上面X+中沒有R的全部屬性,即從Y中拿出屬性A
因爲C→∅,所以(AC)+ = ∅,所以AC不是R的候選碼
因爲E → D,所以(AE)+ = {ADE};又因爲D→B,所以 (AE)+ = {ABDE},所以AE不是R的候選碼
然後求(ACE)+,如果ACE不是候選碼,就重新從Y中選擇一個屬性組成BC、BE、BCE,依次類推
如果拿Y中的一個屬性求不出候選碼,就拿Y中的兩個屬性組合求
關係模式R(A,B,C,D,E,F),其函數依賴集F={AB→E,AC→F,AD→B,B→C,C→D}
- L類屬性:A
- R類屬性:E、F
- LR類屬性:B、C、D
- 令L類屬性的元素爲X,LR類的爲Y
- X+ = A(A+ = A)
- 從Y中取出一個元素B,與X結合得,(AB)+ = ABCDEF
- 從Y中取出一個元素C,與X結合得,(AC)+ = ABCDEF
- 從Y中取出一個元素D,與X結合得,(AD)+ = ABCDEF
故關係模式的候選碼有:AB、AC、AD
注:A單獨推導不出其它元素,因爲函數依賴集中,沒有A → ?,只有
A?→ 元素
哦對了,關係模式R的候選碼可以多個
歡迎大家關注下個人的「公衆號」:獨醉貪歡
後臺回覆「無腦死磕數據庫原理」即可獲得練習題