我正在构建一个内容管理网站,其中还包含其他功能。当管理员通过管理面板删除项目时,我希望将此项目移动到“回收站”30天(然后自动删除)。
实施此功能的最佳方式是什么?
我的一个想法是在我的表中有一个'已删除'位列,然后只显示记录WHERE Hide=0
。但是,这意味着必须记住每次从表中SELECT
都将这个条件放在适当的位置。
我的另一个想法是拥有第二个表,其中记录将在删除时移动到。但是我在我的网站上使用了很多表,因此这意味着表的数量加倍,并且具有重复的表结构(这可能导致将来出现一致性问题)。
理想情况下,我希望有一个“RecycleBin”表,其中所有记录都会被移动到,但是这可能包含100个列,以便能够存储来自所有不同表的数据。
如果有人有任何其他想法,那将非常感激。
感谢。
答案 0 :(得分:7)
我知道的大多数实现使用deleted
列(不是布尔值,而是时间戳,因此您可以判断它何时被删除)。是的,您需要将此添加到您的所有查询中,但是您可能正在使用ORM层,因此您只需添加一次?我建议走这条路。
维基百科对他们文章的当前版本和归档版本使用多个表格,但这是因为它们非常庞大,并且比旧版本更频繁地请求当前版本。
如果要使用一个RecycleBin
表,您可能需要考虑序列化行并将它们放在value
列中,而不是存储所有单独的列。当然,这只有在您不需要查询已删除项目的各个列的内容时才有效,因为这将非常昂贵。
答案 1 :(得分:0)
使用IsDeleted列是一种很好的技术。
您可以将其与删除而不是触发器结合使用,该触发器将使用标志而不是常规删除操作。您还可以使用视图包装表,以便在视图中仅显示非删除行。