15

在我的教育期間(大約4年前)所做的數據庫課程中,我認爲建議避免使用字符串作爲主鍵的數據類型。作爲文本的主關鍵字

有人能告訴我選擇字符變化的優點和缺點 SQL中主鍵的數據類型和上述前提是多少真實?

N.B .:(我正在使用PostgreSQL數據庫)。我也正在處理一種情況,當你需要從另一個表中引用這樣一個表時,因此將字符的外鍵改爲數據類型。請考慮到這一點。

+2

一些見解可以從這裏找到:http://stackoverflow.com/questions/337503/whats-the-best-practice-for-primary-keys-in-tables – 2013-03-18 12:39:53

+0

http://stackoverflow.com/questions/404040 /你怎麼做你的主鍵 – 2013-03-18 13:57:18

回答

10

選擇字符數據類型作爲主鍵字段的好處是您可以選擇可以顯示哪些數據。例如,您可以將電子郵件地址作爲用戶表的關鍵字段。無需額外的色譜柱。另一個好處是,如果你有一個公用的數據表,它保存了多個其他表的索引(想象一下帶有對FINANCE,CONTACT和ADMIN表的外部引用的NOTES表),你可以很容易地知道這個表來自哪個表(例如你的FINANCE表具有F00001的索引,CONTACT表具有C00001的索引等)。我恐怕在這個答覆中弊大於利,因爲我反對這種做法。

的缺點如下:存在正是這個原因,PostgreSQL的

  1. 串行數據類型
  2. 數字索引將在順序輸入和最小的重索引需要做(即如果有表格中鍵Apple,Carrot並且想要插入Banana,表格必須圍繞索引移動,這樣才能在中間插入Banana。如果索引是數字,則很少在索引中間插入數據)。
  3. 從數據中取消鏈接的數字索引不會改變。
  4. 數字索引較短,它們的長度可以固定(4個字節與您選擇的varchar長度無關)。

在你的情況下,你仍然可以在數字索引上放置一個外鍵,所以我不知道爲什麼你想強制它是一個varchar類型。數字字段上的搜索和過濾在理論上比文本字段更快,因爲服務器將被迫首先轉換數據。一般而言,您將擁有一個非羣集的數字主鍵,然後在您要過濾的數據列上創建一個羣集鍵。

這些是編寫SQL時的通用標準,但是當涉及到基準測試時,您只會發現varchar列在連接和過濾方面比整數列稍慢。只要你的主鍵不會改變,那麼你就沒事了。

+4

*「表將不得不繞着索引移動,以便香蕉插入中間」*這些信息是錯誤的,尤其是自OP提到PostgreSQL以來,它不**根據主鍵對記錄進行排序。請參閱:http://stackoverflow.com/a/13191075/517371 – Tobia 2016-06-22 10:22:20