假设我在数据库中有以下表格:
Id ProductId ColorId IsDeleted
1 1 1 1
2 1 1 0
3 2 3 0
我希望ProductId
和ColorId
列唯一,但仅适用于IsDeleted = 0
的行。我如何才能达到这个要求?
我知道,我可以创建一个调用存储函数的约束。并且存储的函数将尝试查找具有相同值的条目。但我认为这是复杂的方式。可能有更好的决定......
答案 0 :(得分:3)
在SQL Server 2008及更高版本中,您可以利用筛选索引来实现此目的:
CREATE NONCLUSTERED UNIQUE INDEX ProductColor
ON dbo.YourTable(ProductID, ColorID)
WHERE IsDeleted = 0;
有关更多背景和最佳做法,请参阅Filtered Index Design Guidelines。