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

实施此功能的最佳方法是什么?

我的一个想法是在我的表中放一个“删除”的列,然后只显示记录 WHERE Hide=0. 。但是,这意味着必须记住每次我 SELECT 从桌子上。

我的另一个想法是有第二个桌子,在删除时,记录将被移至。但是,我的网站上有许多表格,因此这意味着将表格数量增加一倍,并具有重复的表结构(这可能在将来引起一致性问题)。

理想情况下,我想拥有一张“回收书”表,所有记录都已移动到,但这可能包含100列以能够存储所有不同表的数据。

如果有人有其他想法,将最受赞赏。

谢谢。

有帮助吗?

解决方案

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

Wikipedia为其文章的当前版本和存档版本使用多个表,但这是因为它们是联盟外的巨大版本,而当前版本的要求比较旧版本的版本更频繁。

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

其他提示

使用ISDEATER列是一项很好的技术。

您可以将其与删除而不是触发触发器结合,该删除将使用标志而不是常规删除操作。您还可以用视图包裹表,以便在视图中仅暴露出非删除行。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top