【问题标题】:Value unique across columns跨列的唯一值
【发布时间】:2014-02-27 17:17:50
【问题描述】:

我有一个案例,其中我有两列,但值在两列中应该是唯一的。所以你可以考虑下表

CREATE TABLE user_details(
  id int(11) AUTO_INCREMENT PRIMARY KEY,
  email varchar(200),
  secondary_email varchar(200),
  unique key(email),
  unique key(secondary_email)
);

我想要的功能是,电子邮件不能在 emailsecondary_email 列之间重复。因此,给定的电子邮件只能与一个用户链接。我们可以在没有触发器的情况下在 MySQL 中实现它吗?目前我通过应用程序逻辑管理它,有时很难处理,因为来自不同团队的不同模块的不同人员在表中插入/更新数据。

还要补充一点,我的用户表有数百万条记录,并且还可以选择辅助移动设备。创建一个 2x 大小的第二个(或第三个)表并始终连接两个(或三个)表会恶化我的情况。

提前感谢您的所有意见..

【问题讨论】:

  • 为电子邮件创建一个表格,然后在 (id,email_id) 上创建一个唯一键

标签: mysql indexing unique-constraint


【解决方案1】:

如果您标准化您的设计,您可以有一个引用您的用户详细信息的电子邮件表:

user_details_email
------------------
user_details_id (FK)
email_address

user_details_id, email_address 上有一个主键。您可以选择添加一个布尔列以将其标记为主要列。

【讨论】:

  • 我已经添加了相同的问题本身。我的表太大,我不能总是加入 2/3 表来获取用户的基本信息。
  • @cjg 那么你需要一个触发器。如果您不想使用,请正确设计您的数据库。
  • 是的,我同意,但触发器会再次减慢速度:(我在这张桌子上每天有大约 100 万次插入。
  • @cjg 是的,JOINs 更快,所以也许你可以推荐一个更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多