问题描述
我已经读过here,认为使用电子邮件地址字段作为管理用户数据库的主键是一个非常的坏主意。
如何以及为什么?这本书没有深入探讨原因。 如何将电子邮件字段用作表的主键如此有害? 我没有看到一些可怕的长期影响?
编辑: This question是关于字符串比较的性能问题,但是,这与我无关(至少对于此问题而言)。我对使用电子邮件作为主键的长期影响感兴趣。 从经验来看,它通常会在将来引起问题吗?
解决方法
好吧,我想最明显的原因(与性能无关)是用户可能想要(或需要)更改电子邮件地址。
如果电子邮件地址是用户帐户的主要标识符,则可能会很快造成混乱。
从域建模的角度来看,电子邮件地址通常与用户名一样被视为人员/用户的属性。虽然可以合理地不允许更改用户名,但电子邮件地址很可能在某个时候发生更改(用户无法访问该帐户,维护该帐户的组织退休等等)。
此外,无需将电子邮件地址永久分配给同一真实的人。 postgresql.auto.conf
可以由2005年的“乔·米勒”,2013年的“乔·卡洛斯”和2020年以后的“乔伯托·乔曼”所有。
这可能是需要更改的,这是IMO电子邮件地址不能作为好主键的主要原因。
,有几个attributes you look for in a primary key。
“电子邮件地址”出现的问题是
- 无法保证其唯一性-一组人可以同时使用一个电子邮件地址,或者一段时间内不同人可以使用该电子邮件地址。
- 这不是一成不变的-同一个人可能会随着时间的推移更改电子邮件;这将要求您使用外键关系更新所有表
- 它不能唯一地标识一个人-一个人可能有多个电子邮件地址