Ste*_*ven 3 mysql database-design primary-key
例如,像stackoverflow.com这样的网站,使用电子邮件地址识别许多表中的用户是一种好习惯吗?
如果主键很长,那会不好
VARCHAR(50)
甚至
VARCHAR(100)
?
Jam*_*lis 12
并不是的.对于任何相当大的数据集,您最终会浪费大量空间,并且在查询时会受到性能影响.此外,如果有人更改了他们的电子邮件(您可能会或可能不允许),您必须在任何地方更改它.
用于唯一标识用户的代理键将是更好的选择.
不,首先,如果同一个用户提出两个问题怎么办?如果电子邮件是主键,我们现在有PK违规.
其次,它甚至不应该是复合键的一部分.如果用户更改其电子邮件地址怎么办?然后,您需要在表中进行一系列丑陋的更改.
第三,你应该使用类似自动递增ID的东西.字符串(如电子邮件地址)效率极低.
如果您需要将问题与特定成员联系起来,请将memberID外键放入member表中.答案表应该有自己的自动递增ID,questionID外键加入question表中,memberID外键member表示提供答案的成员.等等.
顺便说一句,您可能想要了解数据库规范化,至少要达到第三范式(3NF).这不是wankery,这只是一个很好的常识.