SQL Server“回收站”

4

我正在建设一个内容管理网站,它还包括其他功能。当管理员通过管理面板删除一个条目时,我希望这个条目能够被移动到“回收站”并保留30天(之后自动删除)。

最佳实现方式是什么?

一个想法是在我的表中有一个“Deleted”位列,然后只显示WHERE Hide=0的记录。但是这意味着每次从表格中SELECT数据时都要记得添加此条件。

另一个想法是创建第二个表格,在删除时将记录移动到该表格中。然而,我的网站使用了多个表格,因此这将导致表格数量翻倍,并且存在重复表结构的问题(这可能会在未来导致一致性问题)。

理想情况下,我希望有一个“RecycleBin”表格,所有记录都可以移动到该表格中,但这可能需要包含100多个列以存储来自所有不同表格的数据。

如果有其他想法,敬请赐教。

谢谢。

2个回答

7
我所了解的大多数实现使用一个deleted列(不是布尔值,而是时间戳,这样你就可以知道它何时被删除)。是的,你需要将其添加到所有查询中,但也许你正在使用ORM层,因此只需添加一次?我建议采用这种方式。
维基百科为当前版本和存档版本的文章使用多个表格,但这是因为它们非常庞大,并且当前版本比旧版本经常被请求。
如果你想使用一个RecycleBin表格,你可能想考虑序列化行并将它们放入一个value列而不是存储所有单独的列。当然,这仅在你不需要对已删除项目的单个列的内容进行查询时才有效,因为这将非常昂贵。

啊,好的,听起来是个不错的主意。我曾经考虑过添加一个Deleted位列和一个DeletedDate日期时间列,你的想法将这两个合并了起来!谢谢。 - Curtis

0

使用IsDeleted列是一种不错的技术。

您可以将其与触发器而非删除操作结合使用,该触发器将使用标志而非常规删除操作。您还可以使用视图包装表格,以便在视图中仅公开非删除行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接