电子邮件主键,这是个坏主意吗?
Email-primary key, is it a bad idea?
我读到here使用电子邮件地址字段作为管理用户数据库的主键是一个非常的坏主意。
如何,为什么?这本书没有深入探讨原因。
为什么使用电子邮件字段作为 table 的主键如此有害?
是否有一些我没有看到的可怕的长期影响?
编辑:
This question 是关于字符串比较的性能问题,但是,这与我无关(至少对于这个问题)。我对使用电子邮件作为主键的长期影响感兴趣。
根据经验,以后一般会不会出问题?
嗯,我想最明显的(不是 performance-related)原因是用户可能想要(或需要)更改他们的电子邮件地址。
如果电子邮件地址是用户帐户的主要标识符,这很快就会造成混淆。
从域建模的角度来看,email-addresses 通常作为 persons/users 的属性处理,就像用户名一样。虽然用户名更改可能是不允许的,但电子邮件地址很可能在某个时候发生更改(用户无法访问帐户、维护帐户的组织退休等)。
此外,电子邮件地址不需要永远分配给同一个 real-life 人。 joe@example.com
2005 年可能为“Joe Miller”所有,2013 年可能为“Joe Carlos”所有,从 2020 年起可能为“Joeberto Joeman”所有。
在我看来,这种可能的更改需求是电子邮件地址不能成为好的主键的主要原因。
有几个attributes you look for in a primary key。
“电子邮件地址”的问题是
- 无法保证它的唯一性 - 一个电子邮件地址可能同时被一群人使用,或者随着时间的推移被不同的人使用。
- 它不是一成不变的——同一个人可能会随着时间的推移而改变电子邮件;这将需要您更新所有具有外键关系的表
- 它不能唯一地标识一个人 - 一个人可能有多个电子邮件地址
我读到here使用电子邮件地址字段作为管理用户数据库的主键是一个非常的坏主意。
如何,为什么?这本书没有深入探讨原因。 为什么使用电子邮件字段作为 table 的主键如此有害? 是否有一些我没有看到的可怕的长期影响?
编辑: This question 是关于字符串比较的性能问题,但是,这与我无关(至少对于这个问题)。我对使用电子邮件作为主键的长期影响感兴趣。 根据经验,以后一般会不会出问题?
嗯,我想最明显的(不是 performance-related)原因是用户可能想要(或需要)更改他们的电子邮件地址。
如果电子邮件地址是用户帐户的主要标识符,这很快就会造成混淆。
从域建模的角度来看,email-addresses 通常作为 persons/users 的属性处理,就像用户名一样。虽然用户名更改可能是不允许的,但电子邮件地址很可能在某个时候发生更改(用户无法访问帐户、维护帐户的组织退休等)。
此外,电子邮件地址不需要永远分配给同一个 real-life 人。 joe@example.com
2005 年可能为“Joe Miller”所有,2013 年可能为“Joe Carlos”所有,从 2020 年起可能为“Joeberto Joeman”所有。
在我看来,这种可能的更改需求是电子邮件地址不能成为好的主键的主要原因。
有几个attributes you look for in a primary key。
“电子邮件地址”的问题是
- 无法保证它的唯一性 - 一个电子邮件地址可能同时被一群人使用,或者随着时间的推移被不同的人使用。
- 它不是一成不变的——同一个人可能会随着时间的推移而改变电子邮件;这将需要您更新所有具有外键关系的表
- 它不能唯一地标识一个人 - 一个人可能有多个电子邮件地址