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

Mysql 您应该创建一个id列还是一个唯一的名称就足够了?,mysql,sql,database,Mysql,Sql,Database,我想创建一个包含帐户的表。它应该包含AccountName主键、密码和电子邮件 但是,我应该把一个识别号作为主键,还是帐户名就足够了? 标准、优点和缺点是什么?您必须有主键。如果是一个身份证,一个名字或一封电子邮件,这是你的决定。您必须考虑数据模型和要求。当然不需要ID列。但是我没有看到任何没有id栏的专业软件 最好添加一个自动递增的主键,以便在相关表上具有更好的性能。ID一旦创建就不会更改。但用户可能会更改帐户名、密码或电子邮件地址 另一点是整数比字符串占用更少的内存 如果使用innoDB,可

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

但是,我应该把一个识别号作为主键,还是帐户名就足够了?
标准、优点和缺点是什么?

您必须有主键。如果是一个身份证,一个名字或一封电子邮件,这是你的决定。您必须考虑数据模型和要求。

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

最好添加一个自动递增的主键,以便在相关表上具有更好的性能。ID一旦创建就不会更改。但用户可能会更改帐户名、密码或电子邮件地址

另一点是整数比字符串占用更少的内存

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


几年前,我过去的一个错误是在电子邮件地址上索引表。我认为一个电子邮件地址只能属于一个人。电子邮件地址,例如:x@c.com保存至少7个字节。如果我必须关联10个表呢?它只为一行生成70个字节。因此,任何新行都需要多63个字节才能获得vain。

我的两分钱将始终使用id号作为主键,因为它独立于实际的业务规则。我的意思是,你有选择权的唯一原因是,今天的帐户名将是唯一的。但如果在这条线上发生了变化呢?如果您有一个单独的字段作为主键,那么如果您的需求发生变化,您将不会遇到任何麻烦。

如果AccountName字段是字符串,我建议您创建一个自动递增ID,假设有一天您的表中有很多数据,您需要选择100000行并按所有行排序

所以,如果你有一个INT自动递增字段来排序,那就很好了


当您需要删除某个项目时,它也可以帮助您,因为标识ID列比VARCHAR字段更快、更简单。

您可以将主键分配给任何列,这取决于您自己,但最好将自动递增主键分配给标识列


将来,记录的数量会增加,如果AccountName相同,就会出现问题。

是的,但我不需要自动递增的主键。把一个ID作为整数是一种浪费。到目前为止,我看不到拥有ID的好处,因为您有accountname登录。为什么您声称自动递增的主键在相关表上具有更好的性能?为什么要在这里引入性能?我不是在说性能。。。它只是一个浪费空间有4列ID,名称,通行证,电子邮件,如果我可以有3列名称,通过电子邮件。既然你不打算使用id登录或做任何事情,是的,你不能说它占用更少的空间,因为OP实际上根本不需要这个字段……我完全同意这篇文章。最好的做法是使密钥完全独立于业务逻辑。您不必使用自动递增主键,但如果您决定拥有一个引用此主键的表,将会发生什么情况。例如,与帐户角色类似,并按帐户名称分配一些角色。然后,猜猜如果您需要更改帐户名,Account Roles表会发生什么情况。。。