【資料庫】Primary key 設計的考量

Photo by Florian Berger on Unsplash

Primary key (PK) 是關連式資料庫中,用來識別資料表中的每一筆資料,因此必需具備唯一性與識別性,並且不能為 NULL,PK 必須使用單一欄位,但也可以使用多個欄位組成具有此特性的key來取代此功能,理論上只要具備識別性的資料,都可以拿來當作 PK 使用,實務上PK可以使用 auto increment 欄位、GUID、使用複合欄位或設計一組有規律的資料也可以,並沒有一個最佳的作法。

以下是我的一些經驗分享及網路搜集到的資訊,並不一定是絕對正確,但或許可以當作一些參考:

  1. 先看看資料表中是否已經有可以做 PK 的欄位。
  2. 單一欄位比複合欄位速度更快。
  3. 數值欄位比文字欄位速度更快。
  4. 數值欄位比文字欄位更省空間。
  5. 數值欄位與文字欄位在查詢時速度上差異不大,但在新增時差異很大。
  6. 資料表需要大量INSERT、資料表資料量很大或需要JOIN時,優先使用數值欄位做為 PK。
  7. 分散式資料庫可以使用GUID做為PK,可以保證不管任何地方過來的資料都不會有衝突的狀況,且GUID可以在應用程式端產生,不用到資料庫產生。
  8. 考慮到未來有可能做資料表整併的話,優先使用GUID,不用擔心PK重複。
  9. 如果PK是需要讓使用者識別用的,可以在額外設計一組有規律的Key讓使用者方便記憶,例如員工編號。

Facebook 留言