将已删除的行存储在表中

时间:2010-11-04 06:20:52

标签: sql-server db-structure

SQL Server 表中添加is_deleted列是否是一个好习惯,还是有另一种处理此问题的方法?

我能想到的另一个解决方案是删除该行并将其插入另一个表中以删除行。

什么是最好的解决方案?

提前致谢。

4 个答案:

答案 0 :(得分:2)

取决于

我会使用IsDeleted字段,然后每个时不时地运行一个存档过程,将这些行移到存档表中,这样它们就不会占用一般的空间 - 被删除的表,但仍然可以在需要时检索。

答案 1 :(得分:1)

我会说使用IsDeleted标志而不是删除行(或者IsEnabled,我用于User表之类的东西)。存储很便宜,只是因为行不再有效并不意味着数据毫无价值。

我通常拥有的另一件事是RowCreatedDateStamp列,它已经多次使用了。

答案 2 :(得分:1)

在回答您的问题时可能会有点迟,但您应该在使用IsDeleted列之类的“软删除”时阅读Udi Dahan's post

答案 3 :(得分:1)

这实际上取决于您的情况。将记录标记为已删除的I / O比实际删除要少(没有约束检查,没有页面合并等),但它也会在代码中产生许多额外的复杂性,因为现在您的应用程序需要处理软删除到处记录。所有查询都必须考虑到这一点,因为有些人甚至可能想要返回已删除的记录,有些则严格不能等等。

另一个需要注意的重要事项是,由于法律或客户要求,您的应用程序可能需要进行严格删除。

相关问题