【发布时间】:2011-09-12 20:10:16
【问题描述】:
我有一个表Person,其中包含Code(varchar)、Name(varchar) 和Active(bit) 字段。当我搜索 Person 时,只返回活动记录,而当我删除 Person 时,我设置了 Active = false,这样它就不会出现在我的搜索中。
问题是我在Code 和Name 字段上添加了唯一约束,因此每个Person 只能有一个。现在问题是用户在搜索中看不到Person(因为他们的活动是假的)并尝试添加相同的Person,但唯一约束阻止他们这样做。
有没有办法保持唯一约束,并可能添加一个检查到Active,这样我仍然可以添加那个Person,如果它以前设置为active = false?我知道这里的简单解决方案是完全删除记录,但出于数据目的,我需要保留记录而不是删除它,因此只设置active = false。
谢谢
【问题讨论】:
-
为什么不把存档数据移到分隔存档表?
-
您能否修改您的约束以包括
Code、Name和Active? -
@Yuck:它将防止多个
code+name处于已删除状态(这仍然是完全有效的情况) -
@zerkms:对我来说,即使他们已被删除,他们仍然是同一个人。如果允许的话,这听起来像是
Person表中的重复数据。 -
@Yuck:它们是存档记录。我不认为每个人都有几个过时的行是重复的。它只会在某些事情发生变化时发生。
标签: sql constraints