如何设计单备份table软删除?
How to design a single backup table for soft-deletion?
我研究了在数据库行的软删除和硬删除之间选择什么。我阅读了以下链接中给出的所有建议:
- What is the best way to implement soft deletion?
- Physical vs. logical / soft delete of database record?
- Are soft deletes a good idea?
- http://blog.sqlauthority.com/2010/09/03/sql-server-soft-delete-isdelete-column-your-opinion/
并得出结论,如果旧数据在将来由于审计、恢复等原因变得重要,那么 软删除是删除数据并同时保留数据的唯一方法。它可以如果将 table 行移动到包含相同类型列和一些额外信息(如 Who deleted the row?
或 When was row deleted?
.[ 的备份 table,则可以更有效地实施=26=]
我不知道我的产品和我的客户现在不要求但将来可能需要旧数据的未来会怎样。但是要实现 Backup Table 软删除方法 ,我必须为我的数据库中的每个 table 创建克隆 table。但是将来会有很多 table 和更多 table。或者,如果我更改一个 table 的设计(例如更改数据类型或添加列),我也必须更改其备份 table 的设计。
所以,我的问题是,有什么方法可以创建一个 table,它可以包含已删除的其他 table 的行? (比如 RecycleBin
table 或类似的东西)。
我也愿意接受可以通过性能实现这一目标的其他方法。
我正在使用 SQL Server 2008 和 2012。
更新
好的,我通过结合你们建议的所有内容来建议这个解决方案:
- 原 table 从
A
重命名为 A_Main
- 审计 table 是
A_Audit
存储删除元数据的地方。示例:谁删除了,删除时间等,ID 外键来自 A_Main
.
- 已创建具有旧的原始 table 名称
A
的视图,以避免在所有查询和存储过程中进行修改。此视图将 select 仅来自 A_Main
的那些行,其中 A_Audit
不包含它们的 ID
.
- 现在将在此视图上完成操作。
这个方法好吗?
将此问题视为学术问题:
So, my question is that is there any way I can create a single table
that can contain the rows of other tables that are deleted? (like a
RecycleBin table or something like that).
仅当您要归档的所有 table 具有相同的列结构时。否则,您需要为要为其实施此软删除方法的每个 table 创建一个备份 table。然后,当从原始 table 中删除一行时,您可以在 table 上放置触发器以填充备份 table,或者通过填充备份的存储过程控制删除 table 并从原来的 table.
中删除
我研究了在数据库行的软删除和硬删除之间选择什么。我阅读了以下链接中给出的所有建议:
- What is the best way to implement soft deletion?
- Physical vs. logical / soft delete of database record?
- Are soft deletes a good idea?
- http://blog.sqlauthority.com/2010/09/03/sql-server-soft-delete-isdelete-column-your-opinion/
并得出结论,如果旧数据在将来由于审计、恢复等原因变得重要,那么 软删除是删除数据并同时保留数据的唯一方法。它可以如果将 table 行移动到包含相同类型列和一些额外信息(如 Who deleted the row?
或 When was row deleted?
.[ 的备份 table,则可以更有效地实施=26=]
我不知道我的产品和我的客户现在不要求但将来可能需要旧数据的未来会怎样。但是要实现 Backup Table 软删除方法 ,我必须为我的数据库中的每个 table 创建克隆 table。但是将来会有很多 table 和更多 table。或者,如果我更改一个 table 的设计(例如更改数据类型或添加列),我也必须更改其备份 table 的设计。
所以,我的问题是,有什么方法可以创建一个 table,它可以包含已删除的其他 table 的行? (比如 RecycleBin
table 或类似的东西)。
我也愿意接受可以通过性能实现这一目标的其他方法。
我正在使用 SQL Server 2008 和 2012。
更新
好的,我通过结合你们建议的所有内容来建议这个解决方案:
- 原 table 从
A
重命名为 - 审计 table 是
A_Audit
存储删除元数据的地方。示例:谁删除了,删除时间等,ID 外键来自A_Main
. - 已创建具有旧的原始 table 名称
A
的视图,以避免在所有查询和存储过程中进行修改。此视图将 select 仅来自A_Main
的那些行,其中A_Audit
不包含它们的ID
. - 现在将在此视图上完成操作。
A_Main
这个方法好吗?
将此问题视为学术问题:
So, my question is that is there any way I can create a single table that can contain the rows of other tables that are deleted? (like a RecycleBin table or something like that).
仅当您要归档的所有 table 具有相同的列结构时。否则,您需要为要为其实施此软删除方法的每个 table 创建一个备份 table。然后,当从原始 table 中删除一行时,您可以在 table 上放置触发器以填充备份 table,或者通过填充备份的存储过程控制删除 table 并从原来的 table.
中删除