快速理解資料庫超鍵,候選鍵,主鍵
阿新 • • 發佈:2018-12-20
先了解下對這三種關鍵碼的定義如下:
鍵名 | 定義 |
---|---|
超鍵 (super key) | 在關係中能唯一標識元組的屬性或屬性集稱為關鍵模式的超鍵 |
候選鍵 (candidate key) | 不含有多餘屬性的超鍵稱為候選鍵。也就是在候選鍵中在刪除屬性就不是鍵了。 |
主鍵(primary key) | 使用者選作元組標識的候選鍵稱為主鍵。一般不加說明,鍵就是指主鍵。 |
即候選鍵是超鍵中選出來的,主鍵是從候選鍵中選出來的一組。
超鍵
- 百科百科的解釋:在關係中能唯一標識元組的屬性集稱為關係模式的超鍵。一個屬性可以為作為一個超鍵,多個屬性組合在一起也可以作為一個超鍵。
- 如:在一個學生的表中,假設有“學號”、“姓名”、“相關資訊”、“生日”等欄位, 其中學號是唯一的,那麼(學號)是一個超鍵,同時(學號,姓名,生日)的組合也是唯一的,所以也可以為一個超鍵。但(學號,姓名,生日)也有時候不是唯一的,如果有學號、姓名、生日相同的情況,就會出錯,反正記住一點,就是這些屬性可以區別每一個學生的就是超鍵,也就是根據這些屬性可以唯一確定一名學生的,就是超鍵。
- 假設我們有下面這樣一個學生資訊表:
學號 | 姓名 | 年齡 | 性別 | 專業 |
---|---|---|---|---|
20161 | 李四 | 23 | 男 | CS |
20162 | 李五 | 24 | 女 | MA |
20163 | 李六 | 25 | 男 | CA |
20164 | 李七 | 23 | 男 | AI |
20165 | 李七 | 24 | 女 | CS |
通過觀察,選取能唯一確定一行的屬性組合有:
- (學號)
- (學號,*其他任何列屬性)
- (姓名,年齡)
- (姓名,性別)
- (等等)
通過選取的過程,我們可以理解這裡的超鍵在於可以區別每一個學生,超鍵的組合是唯一的,但可能不是最小唯一的。
候選鍵
候選鍵實在超鍵的基礎上定義的,在要求可以區分每一行的基礎上,同時是最小唯一的,即候選鍵中刪除任何一個屬性後就不能再區分每一行。
同樣是之前那個表
學號 | 姓名 | 年齡 | 性別 | 專業 |
---|---|---|---|---|
20161 | 李四 | 23 | 男 | CS |
20162 | 李五 | 24 | 女 | MA |
20163 | 李六 | 25 | 男 | CA |
20164 | 李七 | 23 | 男 | AI |
20165 | 李七 | 24 | 女 | CS |
(學號)是超鍵,而且沒有其他多餘屬性所以是候選鍵。
(學號,姓名)是超鍵,但是去除姓名後也能區分每一行,所以姓名是多餘的,(學號,姓名)不是一個候選鍵。
(姓名,年齡)是超鍵,而且沒有多餘的 屬性,所以是一個候選鍵。
還有一些也可以做候選鍵,這裡不在贅述。所以,這裡可以看出,候選鍵是沒有多餘屬性的超鍵。
主鍵
為了查詢的方便性和便於表之間的連線,往往設定一組主鍵。主鍵是從候選鍵中選出來的一組,比如之前的表,我們可以以學號作為主鍵,也可以選擇(姓名,年齡)作為主鍵,或者旋轉其他的一個候選鍵。我們將我們最終選擇的一組幸運候選鍵稱為主鍵。