5

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

我有一个带有“客户”表的 mysql 数据库。添加的每个客户都有一个电子邮件,这对于电子邮件来说是唯一的。使用 C++ Builder 添加由 id 字段自动递增引起的记录时会出现问题 - 强制在期间手动递增 id使用 DBEXPRESS 添加新行。

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

4

2 回答 2

3

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

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

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

但是,我会担心的一件事是性能。在进行查询时,将整数作为 id 非常方便,并且在这些字符串中搜索比长字符串要快得多……如果您只是使用电子邮件地址从数据库中检索用户,这并不重要。但是,如果您有具有多个连接的复杂查询,这很重要。

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

于 2012-09-23T09:25:33.527 回答