2011-04-14 52 views

回答

2

如果將來您不得不使用密鑰與其他表進行連接,則其他表應該包含所有數字,這會浪費很多空間。

例如,你有一個「計算機」表

該表

,你有IP的計算。加入你需要一個關鍵的權利?所以,如果你通過密鑰加入,你應該有計算機ID和密鑰(在這種情況下,IP)

我強烈建議使用自動增量更簡單的id,就像它自從大型機(as400),iSeries等

1

我覺得Marc_s' answer的問題When not to use surrogate primary keys?可以指導我們

我下面會說標準必須 滿足:

  • 你自然鍵必須絕對,肯定, 無例外允許的,獨特 (之類的姓名,社會保險號碼 等。通常似乎是唯一的 - 但真的沒有)

  • 你的自然關鍵應該像INT一樣小,例如不顯著更 大小超過4個字節(不使用 VARCHAR(50)爲您的PK,而 尤其不適合您的聚集鍵 在SQL Server中!)

  • 你自然鍵應該是穩定的,例如永遠不會改變(OK,符合ISO 國家代碼,這幾乎是一個給定的 - 除非像南斯拉夫和蘇聯崩潰,或國家其他類似兩兩德統一 - 不過這也夠難得)

如果這些條件 考慮一個天然的鑰匙作爲你的PK - ,但這應該是你所有表格的 的2%例外 - 不是標準。

所以我會說你應該使用代理主鍵。如果你想

你可以隨時使用IP作爲唯一密鑰因爲你使用的是longip,正如你所指出的,它可能可以使用它。

1

幾乎每次你用自然鑰匙開始時,你最終都會後悔。墨菲定律會發生一些事情。爲自己解決麻煩,只需添加ID列即可。

如果它的自動增量你不喜歡只使用一個uuid。 MySql有一個簡單的uuid函數。

相關問題