如何在事务数据库中存储已删除的行
|
这是heximal在我的其他帖子中提出的评论的后续内容。我想要一个“ 0”列来检测已删除的记录,十六进制表示该列是多余的。
这是他的评论:
您将使用
deleted_xx
字段确定记录已删除吗?
恕我直言,最好和最好的方法是添加以记录一些布尔数据类型的活动属性(例如,名为“2ѭ”的字段)。因此,为了“删除”记录,我们必须在单个UPDATE查询中更新ACTIVE
字段和update_date
,updated_by
的值。为了选择所有活动记录,我们只需要进行如下查询:
SELECT * FROM MyTable WHERE ACTIVE = 1
我知道Oracle应用产品使用这种方法,并且我同意
我还阅读了以下帖子:
将已删除的行存储在表中
http://www.udidahan.com/2009/09/01/dont-delete-just-dont/
http://ayende.com/Blog/archive/2009/08/30/avoid-soft-deletes.aspx
我的问题是:如何在具有isActive标志的表上设置唯一约束,如上面的十六进制所示。我的所有表格中都有代理键。但是我想确保自然键列(我们称为业务键列)具有唯一约束。
如果我有一个“ 0”字段来跟踪删除,则可以将此列作为自然键约束的一部分。因此,它允许多个具有相同业务密钥组合的已删除记录,仅在delete_on日期字段中有所不同。
如果我有isActive
字段并使用last_updated_on
列跟踪删除日期,那么我必须对自然键约束使用2个选项
我可以将“ 7”作为我的自然键约束的一部分。但是,这样最多只能允许一个删除的记录具有相同的业务密钥组合。
我可以将isActive
加last_updated_on
作为自然键约束的一部分。但我看到有多余的一列deleted_on使其更容易。
有什么想法吗?我在这里想念什么吗?
没有找到相关结果
已邀请:
3 个回复
担每棱绰
温拎凯玛
玖料萄