从DB进行逻辑删除

时间:2013-03-02 06:09:25

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

我有一个包含许多权限和关系的复杂模式。我想定义一个可以撤消的逻辑删除操作。我考虑过为每个表添加'isDeleted'标志,但它似乎对我来说是错误的。 我还考虑添加一个类似于原始模式的归档模式,并在每个删除操作上移动数据。这似乎需要大量代码来编写“删除”和“取消删除”操作(特别是因为我想在删除casade上模拟逻辑delte。)

最后,我不确定在哪里处理逻辑删除事件 我正在使用EF,所以我可以在代码中执行,或者也许我可以在数据库中使用删除触发器。

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

2 个答案:

答案 0 :(得分:4)

我所工作的每家公司都使用逻辑删除标志并通过代码进行管理。添加归档架构是一个巨大的开销,IMO增加的优点(编码和性能方面)不值得额外的努力。

答案 1 :(得分:0)

由于这是一个OLTP数据库,因此使用IsDeleted标志时没有问题。如果您担心性能问题,我将继续使用IsDeleted标志并通过批处理将其移至归档,而非在线。

我总是记住一件事,以避免过度设计某些事情 - 除非这是一个问题,否则这不是问题。