我已经阅读了关于 mysql 数据库的简单性和良好实践的问题和答案。
我有一个带有“客户”表的 mysql 数据库。添加的每个客户都有一个电子邮件,这对于电子邮件来说是唯一的。使用 C++ Builder 添加由 id 字段自动递增引起的记录时会出现问题 - 强制在期间手动递增 id使用 DBEXPRESS 添加新行。
为什么不跳过自动递增的 id ?有一个没有(自动递增的)id 的表并将电子邮件作为唯一键是否是一种好习惯?这将解决 DBEXPRESS 问题。
否:不要使用电子邮件作为主键。有几个原因:
id
. 符合行业标准是一种良好的做法。从概念上讲,是的,不生成人工唯一键(或至少限制这些实例)是个好主意。并e-mail
服务于自然独特的关键目的。
但是,我会担心的一件事是性能。在进行查询时,将整数作为 id 非常方便,并且在这些字符串中搜索比长字符串要快得多……如果您只是使用电子邮件地址从数据库中检索用户,这并不重要。但是,如果您有具有多个连接的复杂查询,这很重要。
此外,如果您将有关客户的信息存储在多个表中,则另一个表的外键将是电子邮件地址。这意味着您要多次存储电子邮件地址,如果客户决定在某天更改他的电子邮件,这将使保持所有内容更新变得更加困难。