索引:当Status = 'S'时避免表中的重复记录

5

当 status = 'S' 时,有没有避免重复行的方法?示例:

需要执行的表格

我尝试创建一个名为 "unique" 的索引,但是当 status = 'N' 时应该允许重复,那么它将无法正确工作。

有没有避免 SQL 中重复的建议?

1个回答

6

是的,你可以使用 过滤索引

CREATE UNIQUE INDEX UIX_name ON tab(fk_client) WHERE status = 'S';

哇...使用索引来实现约束,当无法编写/实现约束时。这违反了我的一个基本规则。丑陋,但不能否认它有效。我印象深刻。+1 - The Impaler
@TheImpaler 嗯,在这种情况下,部分索引是合适的。部分唯一索引这提供了一种机制,可以在表中的某个子集上强制执行唯一性。 - Lukasz Szozda
我有一个“使用约束而不是索引来强制执行约束”的口头禅。但这个明显违反了这个规则。我猜每天都会学到新东西。 - The Impaler
为什么要有这个规则呢?至少在SQL Server中,唯一约束是通过唯一索引来实施的,因此这种区分对我来说是人为的。 - Ben Thul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接