在學習資料庫的時候,經常要碰到候選鍵的求取,但是一開始的時候,根本搞不清楚怎麼去求,最近看了一些文章和資料,終於搞明白了。
首先來看候選鍵的定義:若關係中的某一屬性組的值能唯一地標識乙個元組,則稱該屬性組為候選鍵。
若w是候選鍵,則必須滿足兩個條件:w的閉包是u;w沒有冗餘。
設關係模式r中u=abc.......等n個屬性,u中的屬性在fd中有四種範圍:
(1)左右出現;
(2)只在左部出現;
(3)只在右部出現;
(4)不在左右出現;
演算法:按以下步驟求候選鍵:
1.只在fd右部出現的屬性,不屬於候選碼;
2.只在fd左部出現的屬性,一定存在於某候選碼當中;
3.外部屬性一定存在於任何候選碼當中;
4.其他屬性逐個與2,3的屬性組合,求屬性閉包,直至x的閉包等於u,若等於u,則x為候選碼。
例1:r,u=(a,b,c,d,e,g),f=,求候選碼。
因g只在右邊出現,所以g一定不屬於候選碼;而b,d只在左邊出現,所以b,d一定屬於候選碼;bd的閉包還是bd,則對bd進行組合,除了g以外,bd可以跟a,c,e進行組合
先看abd
abd本身自包abd,而ab-->c,cd-->e,a-->g,所以abd的閉包為abdceg=u
再看bdc
cd-->e,e-->a,a-->g,bdc本身自包,所以bdc的閉包為bdceag=u
最後看bde
e-->a,a-->g,ab-->c,bde本身自包,所以bde的閉包為bdeagc=u
因為(abd)、(bcd)、(bde)的閉包都是abcdeg所以本問題的候選碼有3個分別是abc、bcd和bde
例2:r,u=(a,b,c),f=,求候選碼。
因為a只出現在左邊,所以a一定是候選鍵。a的閉包還是a,則對a進行組合,可以和b,c進行組合。
首先看ab,ab本身自包ab,而ab-->c,所以ab的閉包是abc=u。
再看ac,ac本身自包ac,而c-->b,所以ac的閉包是abc=u。
因為ab,ac的閉包都是abc,也就是u,所以候選鍵是ab,ac。
資料庫設計主鍵的確定
資料庫的設計涉及到乙個小問題 那就是主鍵的確定。主鍵就是一行記錄的唯一性的確定的一列 或 幾列,但是可選性其實就比較大了 主鍵的確定問題 我就騎驢的計一下 乙個問題,主鍵跟業務邏輯 的關係 網上的前輩們都說跟業務邏輯關係相關性小比較好,但是一直不太懂 其實算是前輩們經驗之談了吧 因為在實際應用中 資...
資料庫 超鍵 候選鍵 主鍵 外來鍵
首先看看各種鍵的定義 超鍵 super key 在關係中能唯一標識元組的屬性集稱為關係模式的超鍵 候選鍵 candidate key 不含有多餘屬性的超鍵稱為候選鍵 主鍵 primary key 使用者選作元組標識的乙個候選鍵程式主鍵 外來鍵 foreign key 如果關係模式r1中的某屬性集不是...
資料庫 超鍵 候選鍵 主鍵 外來鍵
超鍵 super key 在關係中能唯一標識元組的屬性集稱為關係模式的超鍵 候選鍵 candidate key 不含有多餘屬性的超鍵稱為候選鍵 主鍵 primary key 使用者選作元組標識的乙個候選鍵成為主鍵 外來鍵 foreign key 如果關係模式r1中的某屬性集不是r1的主鍵,而是另乙個...