4

我正在构建一个内容管理网站,其中还将包含其他功能。当管理员成员通过管理面板删除项目时,我希望将此项目移至“回收站”30 天(然后自动删除)。

实现此功能的最佳方式是什么?

我的一个想法是在我的表中有一个“已删除”位列,然后只显示记录WHERE Hide=0。然而,这意味着每次我SELECT离开桌子时都必须记住将这个条件放在适当的位置。

我的另一个想法是有第二个表,删除时记录将移动到该表中。但是,我的网站中使用了许多表,因此这意味着表的数量增加了一倍,并且具有重复的表结构(这可能会导致将来出现一致性问题)。

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

如果有人有任何其他想法,将不胜感激。

谢谢。

4

2 回答 2

7

我知道的大多数实现都使用deleted列(不是布尔值,而是时间戳,因此您可以知道它何时被删除)。是的,您需要将其添加到所有查询中,但也许您正在使用 ORM 层,所以您只需添加一次?我建议走这条路。

Wikipedia 为其文章的当前版本和存档版本使用多个表格,但这是因为它们超出了联盟范围,并且当前版本的请求频率比旧版本高得多。

如果您想使用一个RecycleBin表,您可能需要考虑对行进行序列化并将它们放在一value列中,而不是存储所有单独的列。当然,这仅在您不需要查询已删除项目的各个列的内容时才有效,因为这将非常昂贵。

于 2010-06-25T08:28:10.010 回答
0

使用 IsDeleted 列是一种很好的技术。

您可以将其与删除而不是触发器结合使用,触发器将使用标志而不是常规删除操作。您还可以用视图包装表格,以便在视图中只显示未删除的行。

于 2010-06-28T14:56:34.377 回答