【问题标题】:SQL Server 'Recycle Bin'SQL Server '回收站'
【发布时间】:2010-06-25 08:18:29
【问题描述】:

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

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

我的一个想法是在我的表中有一个“已删除”位列,然后只显示记录WHERE Hide=0。但是,这意味着每次我从表中SELECT 时都必须记住设置此条件。

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

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

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

谢谢。

【问题讨论】:

    标签: sql-server-2005 recycle-bin


    【解决方案1】:

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

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

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

    【讨论】:

    • 啊,好吧,这听起来是个好主意。我正在考虑有一个 Deleted 位列和一个 DeletedDate 日期时间列,所以你的想法结合了这两者!谢谢
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 2018-06-24
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      相关资源
      最近更新 更多