如何设计单个备份表进行软删除?

时间:2015-09-15 19:40:19

标签: sql-server database sql-server-2008 soft-delete

我研究了在数据库中对行进行软删除和硬删除之间的选择。我阅读了以下链接中给出的所有建议:

并得出结论,软删除是删除数据并同时保留数据的唯一方法,如果旧数据将来因审核,恢复等原因变得重要而且可以更有效地实施如果将表行移动到包含相同类型列的备份表以及Who deleted the row?When was row deleted?等一些额外信息。

我不知道我的产品的未来会是什么,我的客户现在没有要求,但可能会在将来需要旧数据。但是要实现软删除的备份表方法,我必须为我的数据库中的每个表创建克隆表。但是将来有很多桌子和更多桌子。或者,如果我更改一个表的设计(如更改数据类型或添加列),我也必须更改其备份表的设计。

所以,我的问题是,有没有什么办法可以创建一个可以包含被删除的其他表行的表? (比如RecycleBin表或类似的东西)。

我对其他方法持开放态度,可以通过性能实现这一目标。

我正在使用SQL Server 2008和2012。

更新

好的我建议通过结合你们建议的所有内容来建议这个解决方案:

  1. 原始表格从A_Main
  2. 重命名为A
  3. 审核表为A_Audit,其中存储了删除元数据。示例:使用A_Main的ID外键删除,删除时等。
  4. 创建具有旧原始表名A的视图,以避免在所有查询和存储过程中进行修改。此视图仅会选择A_MainA_Audit不包含其ID的行。
  5. 现在将在此视图上完成操作。
  6. 这是一个好方法吗?

1 个答案:

答案 0 :(得分:1)

将此问题视为学术问题:

  

所以,我的问题是,我有什么方法可以创建一个表   哪些可以包含已删除的其他表的行? (像一个   RecycleBin表或类似的东西)。

仅当您要归档的所有表具有相同的列结构时。否则,您需要为要实现此软删除方法的每个表创建一个备份表。然后,您可以在表上放置一个触发器,以便在从原始表中删除行时填充备份表,或者通过填充备份表并从原始表中删除的存储过程来控制删除。