SQL 唯一键当且仅当未删除
SQL Unique Key iff not Deleted
我有 table 如下:
+----------+---------+
| ParentId | ChildId |
+----------+---------+
这是一个one-to-many关系(一个parent,多个children),目前主键是child id,因为child 只能映射到一个 parent (到目前为止都非常简单)。
我的问题现在出现了,我想添加一个辅助列,如下所示:
+----------+---------+---------+
| ParentId | ChildId | Deleted |
+----------+---------+---------+
所以情况是我需要跟踪,出于审计原因,已删除 parents 的映射,我的想法是使 Child Id 唯一 iff Deleted 是错误的。问题是我如何实现这一目标?是否有可能或应该创建一个我用来存档已删除条目的辅助 table,还有其他建议我如何实现此方法或我可以采用的其他方法吗?
我认为这是你的问题:
my thought was to make Child Id unique iff Deleted is well false.
Question is how do I achieve this?
如果是这样,您可以使用过滤后的唯一索引:
create unique index unq_t_parent_child on t(parent, child)
where isdeleted = 0;
我有 table 如下:
+----------+---------+
| ParentId | ChildId |
+----------+---------+
这是一个one-to-many关系(一个parent,多个children),目前主键是child id,因为child 只能映射到一个 parent (到目前为止都非常简单)。
我的问题现在出现了,我想添加一个辅助列,如下所示:
+----------+---------+---------+
| ParentId | ChildId | Deleted |
+----------+---------+---------+
所以情况是我需要跟踪,出于审计原因,已删除 parents 的映射,我的想法是使 Child Id 唯一 iff Deleted 是错误的。问题是我如何实现这一目标?是否有可能或应该创建一个我用来存档已删除条目的辅助 table,还有其他建议我如何实现此方法或我可以采用的其他方法吗?
我认为这是你的问题:
my thought was to make Child Id unique iff Deleted is well false. Question is how do I achieve this?
如果是这样,您可以使用过滤后的唯一索引:
create unique index unq_t_parent_child on t(parent, child)
where isdeleted = 0;