软删除关于级联恢复的常用属性
问题描述:
通常使用哪种字段来伴随软删除?任何这些,任何其他?软删除关于级联恢复的常用属性
bool IsDeleted // nice because the default value is 0 (no) just in case
date DateDeleted // is this a common one?
date DateCreated // more of a temporal db aspect
date DateModified // same with respect to created
我问的原因是,当使用软删除时,为了保持完整性,必须执行级联。然而,真正的技巧不是级联删除,这很容易。
The trick is cascade restoring
。在级联删除中,使用软删除方案时,关系图中的所有记录都被标记为已删除,无论标记是否为非活动状态,也许差异在于将datedeleted更改为null。在级联还原时,必须评估记录引用,以查看它们被删除的原因是与正在恢复,重新激活,未删除的记录相关的级联删除的结果。
级联还原操作如何处理存储的数据?
答
在要跟踪,不仅发生了什么结果的情况下,也当它发生和为什么,人们经常使用事务日志。
事务日志表通常具有诸如事件日期/时间,事件性质(插入,更新,删除...)以及执行操作的用户和/或过程等列。事务日志和基表中受影响的记录之间还有一个链接。这可以通过基表上的外键对事务日志表来完成,但事务日志包含基表的外键更为常见。如果事务日志表在各种基表之间共享,则需要基表指示符加上基表外键。
在你的情况下,如果删除是主要问题,你可以限制日志条目删除,并区分级联删除和其他删除。您可以(应该)也考虑使用事务包装器一次写入所有软删除(主要级联)。您可以在日志中包含某种标识符,例如标识值或GUID作为“业务事务ID”,并将该ID放入作为同一操作一部分的每个条目中。这给你一个清楚的指示,说明发生了什么,什么时候发生,为什么发生,以及发生了什么记录。您将能够使用这些信息来决定如何撤消任何特定事务,包括执行级联恢复。
主要问题是恢复。删除相当简单。但是,当以级联的反向方式恢复时,很难判断是否有可能恢复级联图时,可能已经删除了图的依赖关系,而要恢复的图被标记为非活动状态。 – 2012-04-11 17:14:18
看到这个问题的恢复更详细的问题:http://stackoverflow.com/q/10111699/1026459 – 2012-04-11 18:30:30
@TravisJ - 我在我的回答指出,我推荐的交易日志表解决方案包括一个“商业交易ID”有助于澄清层叠的内容。通过查找具有相同业务交易ID的所有更改,您可以找到在删除时完成的所有步骤。您可以按照以下步骤执行还原。您可能遇到的唯一可能的问题是级联删除项目是否还具有其他依赖关系,这些依赖项可能在另一个业务事务ID下被软删除。这应该是罕见的。 – 2012-04-11 19:13:54