2014-05-21 47 views
0

我有一個關於數據庫設計的一般性問題。我們有可以在列的哪個位置有唯一的varchar值的數據表,足以區分不同的行。但我認爲我們也應該添加基於int值的自動增量主鍵,而我的同事不同意我的看法。 我的原因如下:如果我的列有唯一的varchar值,我是否需要自動增加int值主鍵?

  1. 使用int值比varchars值更便宜。
  2. 基於int鍵的表之間的互連更加可接受。

我的同事認爲一個唯一的關鍵就夠了,誰是對的? 謝謝。

+0

我傾向於同意你的同事 - 至少如果你的角色數據不是太大。如果添加另一個人造密鑰,則需要爲每個刪除和插入保留兩個唯一索引。然而,字符數據確實存在開銷(大小和CPU成本),但除非您存儲數億行數據,否則我懷疑您可以測量速度差異。 –

+0

我不需要維護varchar值的列,我從外部獲取並存儲它的數據僅用於連接到其他內部系統。我在談論員工的身份證。 – Anatoly

+0

但是,謝謝你的回答,我會把它考慮在內。 – Anatoly

回答

1

這個問題也一直是辯論..

Surrogate vs. natural/business keys

https://www.google.com/search?q=natural+keys+vs+surrogate+keys

你提到「你需要用VARCHAR值保持柱」,我讀了表示你看到的自然變化的關鍵經常。在這種情況下,這不是一個自然的關鍵。

另一方面,你提到它是一個員工ID,通常是一個自然的關鍵。考慮到數據是從外部進入的,除非它是一個自然的關鍵,否則很難保持你的桌子。

閱讀Joe Celko's和Chris Date關於鑰匙的想法並且做出自己的想法。

相關問題