2013-03-17 72 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

相关问题