Navicat 部落格

選擇主索引鍵 - 第 2 部分 2022 年 8 月 23 日,由 Robert Gravelle 撰寫

作為主索引鍵的字串與數值資料類型

歡迎回到這個為關聯式資料庫選擇主索引鍵的系列。在第 1 部分中,我們討論了自然主索引鍵和代理主索引鍵,並考慮了什麼因素決定選擇哪一種。今天的部分將探索字串和數值資料類型,看看哪種更適合作為主索引鍵。

關聯式資料庫中的字串和數值資料類型

字串和數值實際上都是包含了幾種不同資料類型的總稱。對於初學者來說,字串資料類型是一個通用的 IT 術語,傳統上指的是一組字元序列,可以是常值常數,也可以是某種變數。在資料庫方面,以 CHAR 類型表示的單一字元也歸類為字串。其他資料庫字串資料類型包括 VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET。而數值資料類型既包括精確數值資料類型,例如 INTEGER、SMALLINT、DECIMAL 和 NUMERIC,也包括近似數值資料類型,例如 FLOAT、REAL 和 DOUBLE PRECISION。

辯論

關於哪種資料類型最適合做主索引鍵(PK)的建議在互聯網上比比皆是。一些網站直接表示數值鍵近乎總是優於以字元為基礎的鍵,而相同數量的網站則提倡使用字串類型。同時,資料庫供應商本身也不會建議使用哪種類型。他們只提供關於 PRIMARY KEY 條件約束的說明。它可唯一識別資料表中的每筆記錄,並規定:

  • 主索引鍵必須是唯一值,不能含有 NULL 值。
  • 一個資料表只能有一個主索引鍵;在資料表中,主索引鍵可以由單一或多個欄(欄位)組成。
  • 主索引鍵值不應隨時間而改變。

就資料庫供應商而言,只要你的主索引鍵滿足上述標準,那麼你就可以開始了。但這並不意味著一種類型可能比另一種優越。現在,讓我們深入了解這些類型。

支持數值類型

當我第一次學習資料庫開發時,有人告訴我,數值類型最適合作為主索引鍵,因為它們速度更快又省記憶體。我的第一個僱主聯邦政府證實了這一觀點,他們使用了數值主索引鍵,即使這意味著要加入一個代理鍵。

有很多知名的參考網站都呼應了這一觀點。Mysqltutorial.org 在談及 MySQL 時指出:

由於 MySQL 處理整數速度更快,所以主索引鍵欄的資料類型應該是整數,例如 INT、BIGINT。並且你應該確保主索引鍵的整數類型的值範圍足以儲存資料表可能有的列數目。

MySQL 在處理數值資料方面遠不是獨一無二的;關於 Oracle 主索引鍵的另一頁指出「主索引鍵通常是數值,因為 Oracle 處理數字的速度通常比任何其他資料類型更快。」

他們甚至說主索引鍵中的資料應該是「無意義的」:

有時,你可能希望在主索引鍵使用被認為是唯一的有意義的資料,例如社會安全號碼(SSN)、車輛識別號碼(VIN)、電子郵件和電話號碼。但是,你不知道電子郵件或電話號碼何時會變更或被其他人重複使用。在這種情況下,會產生很多資料問題。在資料庫世界中,人工鍵被稱為代理鍵,與自然主鍵相反。

下週預告...

到目前為止,數值主索引鍵似乎是最好的主索引鍵。但是,我們還沒有聽取支持字串一方的意見。也許他們有一些字串取代數值的充分理由。

Navicat 文章
頻道記錄
分享
部落格封存檔