我一直在阅读通过解释为什么主表应该总是在表中使用主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. 什么时候应该直接使用关联ID?
- 2. 我应该使用什么键为HashMap?
- 3. (为什么)我应该使用混淆?
- 4. 为什么我应该使用@properties?
- 5. 为什么我不应该使用Unity?
- 6. 为什么我应该在我的xpages应用程序中使用主题?
- 7. 为什么我的联系表单使用PHPMailer不工作?
- 8. 我应该使用整数主ID吗?
- 9. 我应该使用什么作为gtkmm的opengl小部件?
- 10. 我应该使用什么窗口管理器作为示例?
- 11. Angular为什么不看作品,我应该甚至使用它?
- 12. 我应该使用什么作为null的哈希码?
- 13. C#Lambda表达式:为什么我应该使用它们?
- 14. 为什么Rails应该是单数形式的复数关联?
- 15. 为什么我应该使用vagrant如果我使用virtualenv?
- 16. AWS Cognito:Cognito ID和sub之间的区别,我应该使用什么作为主键?
- 17. 什么是NHibernate,为什么我应该使用它?
- 18. 什么是反向代理,为什么我应该使用Node.JS?
- 19. 为什么rails使用id作为主键,并且应该对其他列进行索引?
- 20. 我应该在MySQL中使用int或char作为id的/ uuid(主键)吗?
- 21. 为什么我的searchkick has_many和HABTM关联不起作用?
- 22. cakePHP:为什么我的模型关联不能用作插件?
- 23. 为什么不应该使用密码作为会话密钥
- 24. Scrapy:为什么我应该为多个请求使用yield?
- 25. 为什么我应该为l18n使用域名?
- 26. 为什么我应该使用单独的测试主机来运行XCTests,我应该怎么做?
- 27. 一个成功的Git分支模型:为什么我不应该使用发布分支作为我的主?
- 28. 为什么我应该在Silverlight应用程序中使用MVVM?
- 29. 我应该使用关联表为未来的灵活性建模吗?
- 30. 为什么我们应该将“Logger”类作为单例考虑?
当你有两个同名的用户时会发生什么? – ennuikiller 2013-03-17 12:32:38
名称是唯一的吗? 'name'是'PRIMARY KEY'吗? – 2013-03-17 12:32:42
它们是唯一的,但不是主键,其他问题的建议似乎是有一个整数主键。 – w4etwetewtwet 2013-03-17 12:34:59