2013-03-17 57 views
3

我一直在閱讀通過解釋爲什麼主表應該總是在表中使用主ID的問題,特別是如果一個表中的記錄需要與另一個表中的記錄相關聯。 但在我的情況下,表是用戶之一,所以有一個名稱字段。當然,爲了關聯我只能使用用戶的名字來關聯,或者我錯過了一些東西。爲什麼我應該使用主ID作爲關聯表

+0

當你有兩個同名的用戶時會發生什麼? – ennuikiller 2013-03-17 12:32:38

+0

名稱是唯一的嗎? 'name'是'PRIMARY KEY'嗎? – 2013-03-17 12:32:42

+0

它們是唯一的,但不是主鍵,其他問題的建議似乎是有一個整數主鍵。 – w4etwetewtwet 2013-03-17 12:34:59

回答

4

你應該有一個主ID的主要原因之一是因爲它應該是永久值,因爲它可以用來引用其他表中的外鍵。

您可以使用名稱,前提是:

  • 有上定義的關鍵。 (顯然是主鍵或唯一鍵
  • 它不能被修改。你已經在你的問題中陳述了:「..associating我可以使用用戶的名字來關聯..」。如果你想修改名稱並且已經有依賴於它的記錄呢?
+0

你忘了提及,如果他使用名稱字段,他必須確保它包含唯一值 – ennuikiller 2013-03-17 12:35:39

+0

鑑於該名稱可能將成爲用戶的電子郵件,他們可能很想改變它(我沒有想到這一點)。所以看起來我會沿着獨特的名稱/電子郵件和主要整數路線。 – w4etwetewtwet 2013-03-17 12:37:32

+1

還有一件事:[INT和VARCHAR主鍵之間是否存在真正的性能差異?](http://stackoverflow.com/questions/332300/is-there-a-real-performance-difference-between-int-and -varchar-primary-keys) – 2013-03-17 12:40:51

0

您可以將名稱定義爲主鍵。結果:不能是您的表中具有相同名稱的兩個用戶。當您按名稱搜索時,數據庫引擎會更快地找到記錄。

或者您可以添加一個整數主鍵。並將名稱字段設爲唯一。在這種情況下,上述兩個想法是存在的。還有一件事:如果您通過整數(id)搜索記錄,則數據庫引擎會更快地找到記錄。

+0

因此,擁有一個整數主鍵使得它至少更快? – w4etwetewtwet 2013-03-17 12:36:25

+0

是的,如果你在你的代碼中使用這個鍵來標識實體,並且在數據庫表中用'WHERE id = xxx' – Kovge 2013-03-17 12:44:30

相關問題