SQL唯一键iff未删除

时间:2017-06-04 23:06:24

标签: sql sql-server composite-primary-key primary-key-design

我的表格如下:

+----------+---------+
| ParentId | ChildId |
+----------+---------+

当主键是子ID时,这是一对多的关系(一个父,多个孩子),因为一个孩子只能映射到一个父(到目前为止都非常直接)。
我现在提出问题,我想添加一个二级列,如下所示:

+----------+---------+---------+
| ParentId | ChildId | Deleted |
+----------+---------+---------+

所以情况是我需要跟踪,出于审计原因,删除父母的映射,我的想法是如果已删除,那么Child Id就是唯一的错误。问题是我如何实现这一目标?是否有可能或者应该创建一个我用来存档已删除条目的辅助表,其他任何建议我如何实现这个或我可以采取的另一种方法?

1 个答案:

答案 0 :(得分:1)

我认为这是你的问题:

  

我的想法是让Child Id独一无二iff Deleted很好。   问题是我如何实现这个目标?

如果是这样,您可以使用过滤的唯一索引:

create unique index unq_t_parent_child on t(parent, child)
    where isdeleted = 0;