1

软删除一般用什么类型的字段?这些中的任何一个,还有其他的吗?

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 值。在级联恢复时,必须评估记录引用以查看它们被删除的原因是否是与正在恢复、重新激活、取消删除的记录相关的级联删除的结果。

如何处理存储数据的级联恢复操作?

4

1 回答 1

1

如果您不仅要跟踪发生的结果,还要跟踪发生的时间和原因,人们经常使用事务日志

事务日志表通常具有以下列:事件的日期/时间、事件的性质(插入、更新、删除……)以及执行操作的用户和/或进程。事务日志和基表中受影响的记录之间也存在链接。这可以通过事务日志表的基表上的外键来完成,但更常见的是让事务日志包含基表的外键。如果事务日志表在各种基表之间共享,则需要一个基表指示符和一个基表外键。

在您的情况下,如果删除是主要问题,您可以将日志条目限制为删除,并区分级联删除与其他删除。您也可以(应该)考虑使用事务包装器来一次编写所有软删除(主要加级联)。您可以在日志中包含某种标识符,例如身份值或 GUID 作为“业务事务 ID”,并将此 ID 放入属于同一操作的每个条目中。这可以让您清楚地了解发生了什么、发生的时间、发生的原因以及发生在哪些记录上。您将能够使用此信息来决定如何撤消任何特定事务,包括执行级联恢复。

于 2012-04-11T11:36:39.407 回答