MySQL中關於超鍵和主鍵及候選鍵的區別
關於超鍵和主鍵及候選鍵的區別
最近在看MySQL的書時遇到瞭一個問題:
既然已經有瞭主鍵這個概念,主鍵已經能夠滿足需求瞭,那為什麼還要有候選鍵這種東西?候選鍵的作用是什麼呢?給瞭它一個候選鍵的定義但是它真的並沒有什麼亂用。
抱著刨根問底攔不住的心態我去網上搜瞭搜,看瞭看大神們的解釋,看得我還是有些懵懂,於是想在這裡梳理一下,幫助自己理解的更通透,也希望如果有理解錯的地方能有人指點一下 下面就是我的一些理解:
其實主鍵和超鍵還好一些,比如有這麼一個表:
表寫的有些糙,湊合看吧。
超鍵
在關系中能唯一標識元組的屬性集稱為關系模式的超鍵。 註定義中的“屬性集”,超鍵可以是一個很大的集合,隻要他能確定是哪一行就行,因此’id’,‘user’,‘pwd’,‘section’,'name’都可以是超鍵的集。
候選鍵
不含有多餘屬性的超鍵,比如在上面的超鍵中,'id’自己就可以獨自確定是哪一行,所以他自己可以是一個候選鍵,除去它以外的另外四個也可以是候選鍵,但是這五個放在一起因為有瞭多餘的列,他們就不是候選鍵。(另外四個可以是候選鍵的原因是每一列都有可能有重復的內容)
主鍵
在所有的候選鍵裡面找一個作為主鍵供使用,也就是說可以是id,也可以是另外四個的合體,也有可能是其他的選擇,隻要能保證選擇的集合能唯一確定即可。
總結來說,候選鍵是超鍵的子集,主鍵是候選鍵的子集。
其實整理瞭這麼多以後我還是不明白候選鍵的作用到底是什麼,其實他可能就是作為一個候車廳一樣,車上隻剩下一個座位,有幾個主鍵在候車廳裡坐著,告訴你:“我們幾個人都買票瞭,都有資格上車,你選誰上,我們誰就跟你去上車”,應該就是這樣。
理解超鍵、候選鍵、主鍵概念及關系
基本概念
- 超鍵(super key):在關系中能唯一標識元組的屬性集稱為關系模式的超鍵/碼。
- 候選鍵(candidate key):不含有多餘屬性的超鍵稱為候選鍵,即其真子集不再是超鍵。
- 主鍵(primary key):用戶選作元組標識的一個候選鍵稱為主鍵,是候選鍵之一。
關系
候選鍵是超鍵的子集,主鍵是候選鍵中的一個。
舉個栗子
考慮屬性集(身份證號,姓名 ,性別 ,年齡),假設無重名
a.其中超鍵有:
- 身份證號、姓名、(姓名,性別)、(姓名,性別,年齡)等
- –這裡可以看出,超鍵是能唯一確定一個人的屬性組
b.超鍵中的候選鍵
- 身份證號、姓名唯一,而且沒有多餘屬性,所以是一個候選鍵
- –這裡可以看出,候選鍵是沒有多餘屬性的超鍵
c.選擇主鍵
- 用戶可根據自己喜好考慮選擇姓名或者身份證號作為主鍵
- –主鍵是選中的一個候選鍵
還不明白?
實例:
在SQL Server數據庫中,有一個學生信息表如下所示,在該表中不能作為候選鍵的屬性集合為( ) (選擇一項)
學號 姓名 性別 年齡 系別 專業
20020612 李輝 男 20 計算機 軟件開發
20060613 張明 男 18 計算機 軟件開發
20060614 王小玉 女 19 物理 力學
20060615 李淑華 女 17 生物 動物學
20060616 趙靜 男 21 化學 食品化學
20060617 趙靜 女 20 生物 植物學
a){學號}
b){學號、姓名}
c){年齡、系別}
d){姓名、性別}
e){姓名、專業}
如果大傢還不知道如何來選擇,再看看基本概念吧!
嗯,不會的就選C吧,哈哈哈哈哈哈
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- MySQL架構設計思想詳解
- Windows Server 2019 MySQL數據庫的安裝與配置理論+遠程連接篇
- MySQL登錄、訪問及退出操作實戰指南
- 如何解決MySQL5升級為MySQL8遇到的問題my.ini
- 詳細介紹windows下MySQL安裝教程