因爲主鍵的做用十分重要,如何選取主鍵會對業務開發產生重要影響。若是咱們以學生的身份證號做爲主鍵,彷佛能惟必定位記錄。然而,身份證號也是一種業務場景,若是身份證號升位了,或者須要變動,做爲主鍵,不得不修改的時候,就會對業務產生嚴重影響。因此,選取主鍵的一個基本原則是:不使用任何業務相關的字段做爲主鍵。所以,身份證號、手機號、郵箱地址這些看上去能夠惟一的字段,均不可用做主鍵。算法
做爲主鍵最好是徹底業務無關的字段,咱們通常把這個字段命名爲id
。常見的可做爲id
字段的類型有:數據庫
自增整數類型:數據庫會在插入數據時自動爲每一條記錄分配一個自增整數,這樣咱們就徹底不用擔憂主鍵重複,也不用本身預先生成主鍵;編程
全局惟一GUID類型:使用一種全局惟一的字符串做爲主鍵,相似8f55d96b-8acc-4636-8cb8-76bf8abc2f57
。GUID算法經過網卡MAC地址、時間戳和隨機數保證任意計算機在任意時間生成的字符串都是不一樣的,大部分編程語言都內置了GUID算法,能夠本身預算出主鍵。編程語言
對於大部分應用來講,一般自增類型的主鍵就能知足需求。咱們在students
表中定義的主鍵也是BIGINT NOT NULL AUTO_INCREMENT
類型。性能
因爲外鍵約束會下降數據庫的性能,大部分互聯網應用程序爲了追求速度,並不設置外鍵約束,而是僅靠應用程序自身來保證邏輯的正確性。這種狀況下,class_id
僅僅是一個普通的列,只是它起到了外鍵的做用而已。關係數據庫經過外鍵能夠實現一對多、多對多和一對一的關係。外鍵既能夠經過數據庫來約束,也能夠不設置約束,僅依靠應用程序的邏輯來保證。spa
索引的效率取決於索引列的值是否散列,即該列的值若是越互不相同,那麼索引效率越高。反過來,若是記錄的列存在大量相同的值,例如gender
列,大約一半的記錄值是M
,另外一半是F
,所以,對該列建立索引就沒有意義。code
能夠對一張表建立多個索引。索引的優勢是提升了查詢效率,缺點是在插入、更新和刪除記錄時,須要同時修改索引,所以,索引越多,插入、更新和刪除記錄的速度就越慢。索引
對於主鍵,關係數據庫會自動對其建立主鍵索引。使用主鍵索引的效率是最高的,由於主鍵會保證絕對惟一。開發