在mysql数据库中使用电子邮件作为id是一种好习惯吗?

时间:2012-09-23 09:15:20

标签: mysql dbexpress

我已经阅读了关于mysql DB的简单性和良好实践的问题和答案。

我有一个mysql数据库,带有'clients'表。每个添加的客户端都有一封电子邮件,这对电子邮件来说是独一无二的。使用C ++ Builder时,添加由id字段自动递增引起的记录会出现问题 - 强制手动递增使用DBEXPRESS添加新行时的ID。

为什么不跳过自动增加的ID?拥有一个没有(自动递增)id的表,并将电子邮件作为唯一密钥是一种好习惯吗?这将解决DBEXPRESS问题。

2 个答案:

答案 0 :(得分:2)

否:不要使用电子邮件作为主键。有几个原因:

  • 您将永远无法存储没有电子邮件地址的人,您可能出于各种原因想要这样做
  • 它使密钥非常“宽”,因此外键也很宽,导致大量浪费的磁盘空间和较慢的查询,因为每个I / O页面的索引条目较少
  • 人们可能会更改他们的电子邮件地址 - 如果它是主键,您将如何处理?
  • 您的查询维护起来不太直观,因为大多数数据库编码器都希望有一个名为id的自动增量键。符合行业标准是一种良好的做法。

答案 1 :(得分:1)

从概念上讲,是的,不生成人工唯一键(或者至少限制这些实例)是个好主意。 e-mail提供了自然独特的关键目的。

然而,我担心的一件事就是表现。在进行查询时,将整数作为id是非常方便的,搜索这些查询比使用长字符串要快得多......如果您只是使用电子邮件地址从数据库中检索用户,则无关紧要。但是,如果您有多个连接的复杂查询,这很重要。

此外,如果在多个表中存储有关客户端的信息,则另一个表的外键将是电子邮件地址。这意味着你多次存储电子邮件地址,如果客户决定有一天决定更改他的电子邮件,这将使更新一切变得更加困难。