软删除通常使用哪种类型的字段?这些中的任何一个,还是其他任何一个?
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值。在级联还原时,必须评估记录引用以查看它们被删除的原因是否是与正在还原,重新激活,未删除的记录相关的级联删除的结果。
如何处理关于存储数据的级联恢复操作?
答案 0 :(得分:1)
如果您不仅要跟踪已发生的事件的结果,还要跟踪何时发生以及为什么,人们通常会使用事务登录强>
事务日志表通常包含以下列:事件的日期/时间,事件的性质(插入,更新,删除,...)以及执行操作的用户和/或进程。事务日志与基表中受影响的记录之间也存在链接。这可以使用基表上的外键到事务日志表来完成,但更常见的是让事务日志包含基表的外键。如果事务日志表在各种基表之间共享,则需要基表指示符和基表外键。
在您的情况下,如果删除是主要问题,您可以将日志条目限制为删除,并区分级联删除与其他删除。您也可以(应该)考虑使用事务包装器一次写入所有软删除(主要加级联)。您可以在日志中包含某种标识符(如标识值或GUID)作为“业务事务ID”,并将此ID放入属于同一操作的每个条目中。这样可以清楚地显示发生的情况,发生的时间,发生的原因以及发生的事件。您将能够使用此信息来决定如何撤消任何特定事务,包括执行级联恢复。