點下面的按鈕可以加入我們!
thorx 寫道: 我整理一下: A.單一欄位 B.不能重複 C.可Null D表格一定要有 --主鍵: 必是單一欄位 不能重複 不能NULL 表格一定要有 唯一鍵: 可多欄位組合 不能重複 可以NULL 表格不一定要有 這樣對吧??
評論
如果是以 mysql 來看
以整數來做自動增值的 auto imcrement 必須使用主鍵
如果以大部分的 MVC Framework 設計來看 , 通常會有類似 findPk() 之類的功能 , 搜尋時直接以主鍵來搜尋 , 就不用特地指名欄位名稱
另外一點是 , 每個 table 只能有一個主鍵 , 可以搭配多個唯一鍵
例如一個會員表
user_id 可以當主鍵
user_name , email , 身分證可以當唯一鍵
因為有可能 user_name , email , 身分證會變動 , 但主鍵通常不會變動 , 這樣也可以讓程式設計上不會那麼複雜
例如一個留言板系統
guestbook 有 user_id , description
通常就是 user_id 和會員的 user_id 做關聯 , 所以用主鍵做關聯才不會複雜
不管是主鍵還是唯一鍵,都是一種索引!!
差別在於
主鍵:必須是單一欄位,且欄位不允許null或空值
唯一:可以是多個欄位集合成的唯一索引
一個table只能有一個主鍵(而且一定要有)用來識別個別資料列
唯一鍵只是一個索引的類型只是這個索引的限制是資料不得重複
在意義上是不同的東西只是他們的效果是一樣
但未必 table 一定要有主鍵 , 如果沒有主鍵而用唯一鍵來識別每一筆記錄
其實還是可以搜到資料的 , 只是這是一種習慣 , 而且也讓系統設計會簡單些 , 所以用主鍵來識別每一筆記錄是一種約定俗成了吧 , 但並非絕對
但若要做 auto increment 非得是主鍵不可
throx 又說 所以主鍵是不是可以看成不能變動的唯一鍵??
其實是這樣沒錯(是看成而非絕對) , 多弄一個主鍵看成不變動的才方便作關聯 , 做 join
A.單一欄位 B.不能重複 C.可Null D表格一定要有
--主鍵: 必是單一欄位 不能重複 不能NULL 表格一定要有
唯一鍵: 可多欄位組合 不能重複 可以NULL 表格不一定要有
這樣對吧??
而且主鍵在表格中也不一定要有喔
所以只能有一筆NULL的資料
如果真的要嚴格來區別唯一鍵跟主鍵的差別
那就得牽扯到資料庫底層的運作了
大部分的資料庫對於主鍵的資料索引都會特別最佳化過(畢竟他是各筆資料的識別代號)
理論上主鍵的索引效率應該要最高(實際各家資料庫怎麼運作就沒深入研究過了)
說不定某些資料庫的實做就是拿unique index實做主鍵