我见过的凭据表的每个实现都有一个自动增加的id来跟踪用户。自动递增的必要性ID
然而,
如果我插入到MySQL表之前验证不同的电子邮件地址,比我可以通过电子邮件地址保证每一行的唯一......还通过电子邮件地址需要,我可以访问表..
有没有人看到这个问题?
我想了解为什么别人不遵循这种方法?
我见过的凭据表的每个实现都有一个自动增加的id来跟踪用户。自动递增的必要性ID
然而,
如果我插入到MySQL表之前验证不同的电子邮件地址,比我可以通过电子邮件地址保证每一行的唯一......还通过电子邮件地址需要,我可以访问表..
有没有人看到这个问题?
我想了解为什么别人不遵循这种方法?
这些电子邮件地址比4字节大得多,对于存储引擎来说可能更糟糕,它们可变长度。
另外一个人可能需要两个账户,或者随着时间的推移可能会有几个电子邮件地址。
然后存在与案例折叠相关的问题。
当其他表具有与用户相关的数据时,您将什么作为外键使用?他们的邮箱地址?如果他们想更改他们的电子邮件地址怎么办?现在单一的一行更新会变成一团糟。
生成的密钥允许您分离可能会改变记录和表之间关系的数据。
@ stack.user.3它可以,但使用代理键是一种很好的做法,因为它不能改变。 –
不管空间的参数 - 电子邮件地址不是一个固定的信息。用于在表之间建立关系的数据应该相当固定到它们所属的行。你可以使用任何你想要的作为关键值,但是你应该优选地选择一些永远不会改变的东西,因为更新从属行的级联效应。电子邮件地址(对我而言)不符合此标准。 – Joe
案例折叠意味着比较字符串,比较它们的大写或小写形式,以便用户可以输入他们的地址而不用担心大写字母。 –
@ stack.user如果每个地址都存储一次,那么这将是真实的。问题是关于将它们用作用户标识符,在这种情况下,它们将存储在需要引用用户的每个其他表中的许多次。 –