1

假设我有一个包含以下字段的表:

primaryEmail | secondaryEmail

我知道如何UNIQUE在其中一个字段上创建一个约束,并且我知道如何创建一个结合UNIQUE两个字段的约束,但是有没有办法确保没有值存在两次,跨越两列?例如,如果字段中有值,我不希望它能够再次出现在字段或字段中。joe@example.comprimaryEmailprimaryEmailsecondaryEmail

4

2 回答 2

2

您可能会考虑修改您的数据模型并将电子邮件地址拉到另一个表,然后将新表和旧表关联在一起。在我的脑海中,这样的事情应该可以工作

create table master (
  id int not null primary key,
  name varchar(64)
);

create table email (
  id int not null primary key,
  address varchar(128) not null unique,
  parent_id int not null,
  type enum('prim', 'secd'),
  foreign key (parent_id) references master(id)
    on delete cascade,
  unique (parent_id, type)
);

我不喜欢这种设计——例如,我不喜欢枚举——但它会解决你的唯一性限制。

于 2012-09-19T20:55:10.023 回答
0

在我看来,如果这确实是你想要完成的事情,你会想要在那个领域设置两个单独的约束。您实际上要做的是两件不同的事情(确保该列在记录中是唯一的,并确保该行中的列对于整个表也是唯一的)。

于 2012-09-19T20:01:41.207 回答