數據庫利用閉包求關系模式的候選碼
求閉包的方法:
理解定義:閉包就是由一個屬性直接或間接推導出的所有屬性的集合
實例:
有關系模式R(A,B,C,D,E,F),F是R上的函數依賴集合,F={A→B,B→C,EF→A,C→DE},則{A,B}的閉包是?
由B→C得出此時閉包為ABC,所以C在集合中,由C→DE得出此時閉包為ABCDE,此時依賴關系已全部用齊~AB的閉包就為ABCDE。
求關系模式的候選碼:
實例:
給定關系模式R(A, B, C, D, E),如果存在依賴:A→B,BC→D,DE→A,則該關系模式的碼為?
1.分別寫出依賴關系兩邊的所有元素
L:CE
R:none
LR:ABD
L為依賴關系中只在左邊出現的元素,這些元素必為碼的一部分或者就是碼。
R為依賴關系中只在右邊出現的元素,這些元素不可能是碼。
LR為依賴關系中在兩邊都出現的元素,這些元素可能是碼,我們需要求閉包進一步判斷。
2.使用閉包求候選碼
因為L有CE兩個元素,LR有ABD三個元素,我們要求最小的依賴關系集,簡單來說求出候選碼的元素個數要最少,首先對CE求候選碼,如果CE直接是候選碼的話那么該集合關系候選碼就為CE,如果CE不是候選碼,則繼續求CE+,也就是ACE,BCE,CDE,用上述的方法進行求閉包,如果閉包的元素為U(全集:ABCDE),則該集合是一個碼。
CE:C啥子也不能推出,E啥子也不能推出~,所以自身閉包就是CE,而非U,因此CE不是碼
ACE:A→B,則此時閉包為ABCE,BC在ABCE中,BC→D,此時閉包仍然為ABCDE,即閉包為U,滿足碼的條件,ACE為碼,就不用繼續看完所有依賴了~
BCE:同理嘛,BC→D,此時閉包為BCDE,DE→A,此時閉包為ABCDE,即U,BCE為碼~
CDE:DE→A,此時閉包為ACDE,A→B,此時閉包為ABCDE,即U,所以CDE也為碼~
那么最后可以得出ACE,BCE,CDE為候選碼,也就是碼。