Sae*_*ati 1 sql-server filtered-index unique-constraint
假设我有一张Customers
桌子和一张Emails
桌子。Emails
表有这些字段:
Id
CustomerId
EmailValue
Run Code Online (Sandbox Code Playgroud)
现在,我想创建一个约束,以便每个客户都不应该注册重复的电子邮件。我能想到的方法有:
但是,我最近熟悉了 SQL Server 的筛选索引。尽管我不知道它在这种特定情况下是否可以帮助我。我见过的大多数示例都是过滤掉NULL值,以便为可空列创建唯一索引。
有没有办法可以使用过滤索引来实现我想要的?
在两列上创建唯一约束。
alter table dbo.Emails add constraint UQ_Emails unique (CustomerId, EmailValue);
Run Code Online (Sandbox Code Playgroud)
这将防止每个客户重复发送电子邮件。不同的客户仍然可以使用相同的电子邮件。
来自评论:
如果我也有一个
IsDefault
字段怎么办?在这种情况下,要求将是:每个客户应该只有一个有效的电子邮件,并且每个客户都不应该有重复的电子邮件”
如果您添加过滤的唯一索引,您可以这样做:
create unique nonclustered index UX_Emails
on dbo.Emails (CustomerID)
where IsDefault = 1;
Run Code Online (Sandbox Code Playgroud)