2012-10-24 59 views
1

我想创建一个包含“电子邮件地址”和/或“用户名”字段的“用户”表,我是否还应该将“id”int usigned auto_increment添加为primary key选择PRIMARY KEY

我在问,因为我已经看到一些教科书示例在这样的表中使用“id”字段与另一个unique字段。

+0

你不需要,但我总是这样做。 – DickieBoy

+0

根据您的应用程序,您可能不希望对电子邮件进行唯一限制。 – Kermit

回答

4

是的,这是最佳做法。

  1. 您将在其他表中使用它作为外键。
  2. 您希望密钥保持唯一(您可能想要更改用户名)
  3. 您希望密钥被索引,对于数字类型,索引将小于varchar。
+0

为什么我不能在其他表中使用“userName”字段作为外键? – MTVS

+0

@csstd字符串搜索和整数索引较慢。 – Kermit

1

您应该使用userId列,因为使用VARCHAR索引表的列数据类型的性能会较差。使用INT更好的性能。他们占用更少的空间,更重要的是他们比较快。可以在一个CPU指令中执行INT比较。对于VARCHAR s或CHAR s,必须依次比较每个字符。这使得每个PK查找更快。如果你有连接表,每个连接选择都会查找PK。