数据库设计:将电子邮件作为表的ID

arg*_*g20 0 java sql database jpa database-schema

我正在研究Java Web应用程序.对于身份验证,我要求用户输入他的电子邮件和密码.现在,我正在使用JPA 2,这可能不是那么重要.
如果电子邮件是Users表的关键,那么它将简化我的生活.我可以做一个简单的事情:

User selected = em.find(User.class, userEmail);
Run Code Online (Sandbox Code Playgroud)

请参阅?,此外,每个电子邮件地址都是唯一的,它没有空格等.现在,没有人这样做,我猜这是有原因的.我也怀疑,我的意思是,它是varchar等.但你认为这是一个好主意吗?如果没有,为什么?这必须是一个很好的理由,因此权衡不值得.数字键总是最好的,但在这里我发现自己一遍又一遍地处理用户的电子邮件,并且一直通过电子邮件搜索它们,除了连接列等之外从未真正使用过id.

Jus*_*ave 5

想到的最大问题是用户的电子邮件地址会随着时间而改变.如果您设置一个系统,其中电子邮件地址是主键,那么稍后更改电子邮件地址是一种巨大的痛苦 - 您必须将更改传播到所有子表,这将要求所有外键约束都可以推迟.