2011-11-13 66 views
0

我见过的凭据表的每个实现都有一个自动增加的id来跟踪用户。自动递增的必要性ID

然而,

如果我插入到MySQL表之前验证不同的电子邮件地址,比我可以通过电子邮件地址保证每一行的唯一......还通过电子邮件地址需要,我可以访问表..

有没有人看到这个问题?

我想了解为什么别人不遵循这种方法?

回答

2

这些电子邮件地址比4字节大得多,对于存储引擎来说可能更糟糕,它们可变长度。

另外一个人可能需要两个账户,或者随着时间的推移可能会有几个电子邮件地址。

然后存在与案例折叠相关的问题。

+0

案例折叠意味着比较字符串,比较它们的大写或小写形式,以便用户可以输入他们的地址而不用担心大写字母。 –

+0

@ stack.user如果每个地址都存储一次,那么这将是真实的。问题是关于将它们用作用户标识符,在这种情况下,它们将存储在需要引用用户的每个其他表中的许多次。 –

2

当其他表具有与用户相关的数据时,您将什么作为外键使用?他们的邮箱地址?如果他们想更改他们的电子邮件地址怎么办?现在单一的一行更新会变成一团糟。

生成的密钥允许您分离可能会改变记录和表之间关系的数据。

+0

@ stack.user.3它可以,但使用代理键是一种很好的做法,因为它不能改变。 –

+1

不管空间的参数 - 电子邮件地址不是一个固定的信息。用于在表之间建立关系的数据应该相当固定到它们所属的行。你可以使用任何你想要的作为关键值,但是你应该优选地选择一些永远不会改变的东西,因为更新从属行的级联效应。电子邮件地址(对我而言)不符合此标准。 – Joe