我一直在閱讀通過解釋爲什麼主表應該總是在表中使用主ID的問題,特別是如果一個表中的記錄需要與另一個表中的記錄相關聯。 但在我的情況下,表是用戶之一,所以有一個名稱字段。當然,爲了關聯我只能使用用戶的名字來關聯,或者我錯過了一些東西。爲什麼我應該使用主ID作爲關聯表
回答
你應該有一個主ID的主要原因之一是因爲它應該是永久值,因爲它可以用來引用其他表中的外鍵。
您可以使用名稱,前提是:
- 有上定義的關鍵。 (顯然是主鍵或唯一鍵)
- 它不能被修改。你已經在你的問題中陳述了:「..associating我可以使用用戶的名字來關聯..」。如果你想修改名稱並且已經有依賴於它的記錄呢?
你忘了提及,如果他使用名稱字段,他必須確保它包含唯一值 – ennuikiller 2013-03-17 12:35:39
鑑於該名稱可能將成爲用戶的電子郵件,他們可能很想改變它(我沒有想到這一點)。所以看起來我會沿着獨特的名稱/電子郵件和主要整數路線。 – w4etwetewtwet 2013-03-17 12:37:32
還有一件事:[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
您可以將名稱定義爲主鍵。結果:不能是您的表中具有相同名稱的兩個用戶。當您按名稱搜索時,數據庫引擎會更快地找到記錄。
或者您可以添加一個整數主鍵。並將名稱字段設爲唯一。在這種情況下,上述兩個想法是存在的。還有一件事:如果您通過整數(id)搜索記錄,則數據庫引擎會更快地找到記錄。
因此,擁有一個整數主鍵使得它至少更快? – w4etwetewtwet 2013-03-17 12:36:25
是的,如果你在你的代碼中使用這個鍵來標識實體,並且在數據庫表中用'WHERE id = xxx' – Kovge 2013-03-17 12:44:30
- 1. 我應該使用什麼作爲此表的主鍵?
- 2. 什麼時候應該直接使用關聯ID?
- 3. 爲什麼我應該使用@properties?
- 4. 我應該爲git user.name使用什麼?
- 5. 我應該使用什麼鍵爲HashMap?
- 6. 爲什麼我不應該使用Unity?
- 7. 爲什麼我不應該使用atoi()?
- 8. (爲什麼)我應該使用混淆?
- 9. 爲什麼我應該使用org.gradle.api.tasks.Exec?
- 10. 我應該爲create_or_update操作使用什麼操作
- 11. 爲什麼我應該在我的xpages應用程序中使用主題?
- 12. 爲什麼/當我應該使用骨幹關係框架
- 13. 爲什麼我們應該在proguard.cfg中使用關鍵字「-keep」
- 14. 當我爲iOS應用ID啓用關聯域時會發生什麼情況?
- 15. 爲什麼我的聯繫表單使用PHPMailer不工作?
- 16. 我應該在哪裏使用工作單位?爲什麼?
- 17. 我應該使用什麼作爲gtkmm的opengl小部件?
- 18. SEO - 我應該使用什麼元素作爲標題?
- 19. Angular爲什麼不看作品,我應該甚至使用它?
- 20. 我應該使用什麼作爲null的哈希碼?
- 21. 我應該使用什麼窗口管理器作爲示例?
- 22. 我應該使用整數主ID嗎?
- 23. 爲什麼我不應該使用製表符縮進?
- 24. C#Lambda表達式:爲什麼我應該使用它們?
- 25. 爲什麼我應該使用vagrant如果我使用virtualenv?
- 26. 爲什麼Rails應該是單數形式的複數關聯?
- 27. 什麼是Template.myTemplate.helpers(幫助器),爲什麼我應該使用它?
- 28. 什麼是NHibernate,爲什麼我應該使用它?
- 29. 爲什麼/我應該在什麼時候使用dojo模塊?
- 30. 依靠默認編碼,我應該使用什麼,爲什麼?
當你有兩個同名的用戶時會發生什麼? – ennuikiller 2013-03-17 12:32:38
名稱是唯一的嗎? 'name'是'PRIMARY KEY'嗎? – 2013-03-17 12:32:42
它們是唯一的,但不是主鍵,其他問題的建議似乎是有一個整數主鍵。 – w4etwetewtwet 2013-03-17 12:34:59