【问题标题】:Logical delete from DB从数据库中逻辑删除
【发布时间】:2013-03-03 01:15:15
【问题描述】:

我有一个包含许多实体和关系的复杂架构。我想定义一个可以撤消的逻辑删除操作。我考虑过在每个表中添加“isDeleted”标志,但对我来说似乎很容易出错。 我还考虑添加一个类似于原始模式的存档模式,并在每个删除操作中将数据移动到那里。这似乎需要为“删除”和“取消删除”操作编写大量代码(尤其是因为我想模拟逻辑删除的删除级联)。

最后,我不确定在哪里处理逻辑删除事件 我正在使用 EF,所以我可以在代码中执行此操作,或者我可以在他的 DB 中使用删除触发器。

我会欣赏有关如何以优雅的方式实现逻辑删除的任何建议。谢谢。

【问题讨论】:

    标签: .net sql sql-server entity-framework-4


    【解决方案1】:

    我工作过的每家公司都一直使用逻辑删除标志并通过代码对其进行管理。添加存档模式是一项巨大的开销,IMO 其增加的优雅(编码和性能方面)不值得付出额外的努力。

    【讨论】:

    • deleted 标志的缺点是,虽然您在删除操作中节省了精力,但您需要为每个查询添加 isDeleted = false 检查。
    • @omer schleifer 每个数据库中的“已删除”列是您的索引的一部分,并且在您的查询范围中是默认的,这要容易得多,并且您将业务逻辑放在代码中,而不是在数据库中。如果您想恢复或只查看已删除的记录怎么办?所以我怀疑任何其他尝试都值得超载和复杂。
    【解决方案2】:

    因为这是一个 OLTP 数据库,所以我使用 IsDeleted 标志没有问题。如果您担心性能,我将继续使用 IsDeleted 标志并通过批处理而不是在线将其移动到存档。

    我始终牢记一件事,以避免过度设计某些东西 - 除非它是一个问题,否则它不是问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多