在数据库设计中使用用户名作为主键是不是很糟糕?

Ste*_*ven 21 mysql database-design primary-key unique-key

一位朋友告诉我:

你用什么独特的钥匙?我希望你不是保存整个用户名---这会占用太多的表空间!为每个(唯一)userNAME分配唯一的userID并保存此userID(应为INTEGER UNSIGNED auto_increment或BIGINT UNSIGNED auto_increment).不要忘记创建参考

使用userID的所有表中的FOREIGN KEY(userID)REFERENCES usertable(userID).

以上陈述是否正确?为什么或者为什么不?

Gra*_*ton 49

我认为他是对的(出于错误的原因),因为主键不能改变,但username可以改变.所以你应该使用userid因为它不会改变.

  • 主键无法更改.或者它不是"主要的".密钥应该是系统分配的,以保证它永远不会改变.其他字段(如名称)可以具有唯一索引,但不能是主键 - 根据定义. (2认同)
  • 连接表也是如此吗?换句话说,我是否应该为连接表中的每个条目创建 ID,因为主键的组合可以更改? (2认同)

Vin*_*vic 19

他出于错误的原因是正确的.表空间是次要的,因为您的应用程序可能稍后要求更改用户名甚至不再是唯一的(您可以设想不需要唯一用户名的应用程序,例如Stack Overflow),因此您的应用程序需要进行重大的重构和数据迁移而不是其他(整数PK)情况下的轻微变化.