删除数据库记录unpermenantley(软删除)

Kas*_*hef 7 c# sql database asp.net

故事

我将编写一些代码来管理我的应用程序中已删除的项目,但我将软删除它们,以便在需要时将其返回.在隐藏或删除项目时,我的应用程序逻辑中有一个层次结构.

我逻辑上把我的物品放在三个容器中,分别是国家,城市,地区和品牌.每个项目应属于一个国家,一个城市,一个区域和一个品牌.现在,如果我删除了一个国家/地区,则应删除属于指定国家/地区的城市,地区,品牌和商品.如果我删除了城市,它也应该删除它下面的所有东西(地区,品牌等)


一张纸条

当我删除一个国家并删除相关品牌时,我应该注意一个品牌可能在多个国家/地区拥有商品.


问题

你建议吗?

  1. 将项目(无论是国家,城市,项目等)标记为已删除,这将需要大量代码来检查每次从数据库加载任何项目时,如果它已被删除,还需要一些额外的字段来标记是否删除它所属的城市,删除它所属的国家,依此类推.

  2. 将已删除的内容分别移动到特定的表(DeletedCountries,Deleted Cities等)并保存与之关联的项目的ID,以便稍后将其插入到原始表中.当然,这将保存我的应用程序所有代码,这些代码将设法检查所有已删除的项目并确保删除所有层次结构.

  3. 也许你对实现这样的事情有更好的方法/建议/想法!

dan*_*ana 4

出于争论的目的,解决方案#2(将已删除的项目移至其自己的表中)的一个优点是,如果您有大量记录,则不必担心针对其“已删除”状态对记录进行索引。

话虽如此,如果我要将数据从一个表“移动”到另一个表(通过删除然后插入),我将确保在 1 个事务中完成此操作。