您应该创建一个id列还是一个足够的唯一名称?

时间:2014-04-02 18:39:18

标签: mysql sql database

我想创建一个包含帐户的表。它应包含AccountName(主键),密码和电子邮件。

但是我应该将识别号码作为主键还是AccountName足够? 标准,优点和缺点是什么?

5 个答案:

答案 0 :(得分:3)

如果“AccountName”字段是字符串我建议你创建一个AUTO INCREMENT ID,假设有一天你的表中有很多数据,你需要选择100,000行并按顺序排序。

因此,如果你有一个INT AUTO_INCREMENT字段来订购它很好。

当你需要删除项目时,它可以帮助你,对于indentity ID列比VARCHAR字段更快更容易。

答案 1 :(得分:2)

我的两分钱是始终将id号作为主键,因为它独立于实际的业务规则。我的意思是你有选择的唯一原因是今天的账户名称将是独一无二的。但是,如果下线变化怎么办?如果您有一个单独的字段作为主键,如果您的需求发生变化,您将不会遇到任何麻烦。

答案 2 :(得分:1)

您必须拥有primary key。如果它是ID,姓名或电子邮件,那么这是您的决定。您必须考虑数据模型和要求。

答案 3 :(得分:1)

当然不需要ID列。但我还没有看到任何没有id列的专业软件。

最好添加自动递增的主键,以便在相关表上获得更好的性能。创建ID后,ID永远不会更改。但是,用户可能会更改帐户名称,密码或电子邮件地址。

另一点是整数占用的内存少于字符串。

如果您使用的是innoDB,则可能需要索引。因此,最好定义主键,并使其成为数字。主键应该是顺序的和小的。

几年前,我过去的一个错误是通过电子邮件地址索引表格。我以为电子邮件地址只能属于一个人。电子邮件地址(例如:x@c.com)至少包含7个字节。如果我必须联系10张桌子怎么办?它仅为一行产生70个字节。所以任何新行都需要63个字节才能徒劳。

答案 4 :(得分:0)

您可以将主要内容分配给它所属的任何列,但最好将自动增量主键分配给ID列。

将来,如果AccountName相同,记录数量会增加,这会产生问题。