在网站系统的许多表中使用电子邮件地址作为主键是一种好的做法吗?

Ste*_*ven 3 mysql database-design primary-key

例如,像stackoverflow.com这样的网站,使用电子邮件地址识别许多表中的用户是一种好习惯吗?

如果主键很长,那会不好

VARCHAR(50)

甚至

VARCHAR(100)

Jam*_*lis 12

并不是的.对于任何相当大的数据集,您最终会浪费大量空间,并且在查询时会受到性能影响.此外,如果有人更改了他们的电子邮件(您可能会或可能不允许),您必须在任何地方更改它.

用于唯一标识用户的代理键将是更好的选择.

  • 在宏伟的计划中,这些联合通常非常便宜. (2认同)

jas*_*son 7

不,首先,如果同一个用户提出两个问题怎么办?如果电子邮件是主键,我们现在有PK违规.

其次,它甚至不应该是复合键的一部分.如果用户更改其电子邮件地址怎么办?然后,您需要在表中进行一系列丑陋的更改.

第三,你应该使用类似自动递增ID的东西.字符串(如电子邮件地址)效率极低.

如果您需要将问题与特定成员联系起来,请将memberID外键放入member表中.答案表应该有自己的自动递增ID,questionID外键加入question表中,memberID外键member表示提供答案的成员.等等.

顺便说一句,您可能想要了解数据库规范化,至少要达到第三范式(3NF).这不是wankery,这只是一个很好的常识.