假设我有一张Customers
桌子和一张Emails
桌子。Emails
表有这些字段:
Id
CustomerId
EmailValue
现在,我想创建一个约束,以便每个客户不应该注册重复的电子邮件。我能想到的方法是:
- 创建一个函数以确保每个新电子邮件值的唯一性,并在检查约束中调用该函数
- 创建触发器,并在每次插入或更新时确保每个客户的电子邮件不重复
- 完全忘记数据库,把这部分业务放在我的应用层
不过,我最近熟悉了 SQL Server 的过滤索引。虽然我不知道它是否可以在这种特定情况下帮助我。我见过的大多数示例都是过滤掉NULL值,以便为可为空的列创建唯一索引。
有没有办法可以使用过滤索引来实现我想要的?
在两列上创建唯一约束。
这将防止每个客户重复电子邮件。不同的客户仍然可以拥有相同的电子邮件。
来自评论:
如果添加过滤的唯一索引,则可以这样做: