Database design 软删除与级联恢复有关的公共属性

Database design 软删除与级联恢复有关的公共属性,database-design,theory,rdbms,cascade,soft-delete,Database Design,Theory,Rdbms,Cascade,Soft Delete,软删除通常使用哪种类型的字段?这些,还有其他的吗 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 我询问的原因是,在使用

软删除通常使用哪种类型的字段?这些,还有其他的吗

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
我询问的原因是,在使用软删除时,仍然必须实现级联以保持完整性。然而,真正的技巧不是级联删除,这相当容易

技巧是级联恢复
。在级联删除中,在软删除场景中,关系图中的所有记录都标记为已删除、不活动,无论标记是什么,可能区别在于将datedeleted从null更改为值。在级联还原时,必须对记录引用进行求值,以查看它们被删除的原因是否是与正在还原、反应、取消删除的记录相关的级联删除的结果


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

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

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


在您的情况下,如果主要考虑删除,您可以将日志条目限制为删除,并区分级联删除和其他删除。您还可以考虑使用事务包装器一次性写入所有软删除(主加级联)。您可以在日志中包含某种标识符,如标识值或GUID作为“业务事务ID”,并将此ID放入属于同一操作的每个条目中。这可以清楚地说明发生了什么,何时发生,为什么发生,以及发生在哪些记录上。您可以使用此信息来决定如何撤销任何特定事务,包括执行级联还原。

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

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


在您的情况下,如果主要考虑删除,您可以将日志条目限制为删除,并区分级联删除和其他删除。您还可以考虑使用事务包装器一次性写入所有软删除(主加级联)。您可以在日志中包含某种标识符,如标识值或GUID作为“业务事务ID”,并将此ID放入属于同一操作的每个条目中。这可以清楚地说明发生了什么,何时发生,为什么发生,以及发生在哪些记录上。您可以使用此信息来决定如何撤销任何特定事务,包括执行级联还原。

主要问题是还原。删除是相当容易的。但是当以级联的逆方式恢复时,很难说在级联图可以恢复的同时,当要还原的图被标记为非活动时,该图所具有的依赖关系可能已被删除。有关还原的更详细问题,请参阅此问题:@TravisJ-我在回答中指出,我建议的事务日志表解决方案包括“业务事务ID”这有助于澄清级联的内容。通过查找具有相同业务事务ID的所有更改,您可以找到在删除时完成的所有步骤。您可以反转这些步骤来执行恢复。您可能遇到的唯一问题是,级联删除的项目是否还具有其他依赖项,这些依赖项可能已在其他时间在不同的业务事务ID下被软删除。这应该很少见。主要问题是恢复。删除是相当容易的。但是当以级联的逆方式恢复时,很难说在级联图可以恢复的同时,当要还原的图被标记为非活动时,该图所具有的依赖关系可能已被删除。有关还原的更详细问题,请参阅此问题:@TravisJ-我在回答中指出,我建议的事务日志表解决方案包括“业务事务ID”这有助于澄清级联的内容。通过查找具有相同业务事务ID的所有更改,您可以找到在删除时完成的所有步骤。您可以反转这些步骤来执行恢复。您可能遇到的唯一可能的问题是,级联删除的项目以某种方式还具有其他依赖项,这些依赖项可能已在其他时间在不同的业务事务ID下被软删除。这应该是罕见的。