【发布时间】:2011-02-02 17:43:07
【问题描述】:
软删除是好主意还是坏主意?
您只需将其标记为IsDeleted = true,而不是实际删除数据库中的记录,在恢复记录后您可以将其标记为False。
这是个好主意吗?
物理上删除记录,然后将其移动到存档数据库,如果用户想要恢复记录,那么软件将在存档中查找记录并重新创建它是不是更好?
【问题讨论】:
-
@Brian - 他们使用碎纸机。
-
使用删除时间戳,而不是标志。
-
我在一个应用程序上工作,该应用程序在表上使用了
IsDeleted属性。结果是经常出现错误。问题应该很明显:普通用户想要对表运行的每个查询都涉及non-deleted数据,这意味着涉及该表的99.9% 的查询必须将...AND IsDeleted = 'N'添加到其WHERE子句中。自然地,它经常被省略:要么编码人员忘记添加它,要么不知道他们必须首先添加它。当然,在原始规范中并没有这样的要求,编码器正在使用他们的主动性...... -
@onedaywhen - 您描述的问题可以通过使用
VIEW轻松解决。如果之后添加IsDeleted,甚至应该可以将原始表重命名,例如将mytable改为mytable_all,然后将视图命名为mytable,并添加另一个名为mytable_deleted的视图。这样就不需要更改对表的引用。 -
@blasto:使用审计表和审计列(删除、创建、更新和由谁)来跟踪删除行的原因。根据问题域,了解数据被删除的原因可能并不相关。如果相关,则添加注释列:审计表将跟踪修订历史。
标签: sql database database-design data-modeling soft-delete