【发布时间】:2011-03-09 03:46:45
【问题描述】:
故事
我将编写一些代码来管理我的应用程序中已删除的项目,但我将软删除它们,以便在需要时将它们返回。在隐藏或删除项目时,我的应用程序逻辑中有一个层次结构需要尊重。
我逻辑上将我的物品放在国家、城市、地区和品牌的三个容器中。 每个项目都应该属于一个国家、一个城市、一个地区和一个品牌。 现在,如果我删除一个国家,它应该删除属于给定国家的城市、地区、品牌和项目。如果我删除了城市,它也应该删除它下面的全部内容(地区、品牌等)
注意事项
当我删除一个国家/地区并删除关联品牌时,我应该注意一个品牌可能在多个国家/地区拥有商品。
问题
你有什么建议
将项目(无论是国家、城市、项目等)标记为已删除,这将需要大量代码来检查每次从数据库加载任何项目时是否已删除以及一些额外的字段来标记它所属的城市是否被删除,它所属的国家是否被删除等等。
将删除的内容分别移动到特定的表(DeletedCountries、Deleted Cities 等) 并保存与之关联的项目的 ID,以便稍后我可以将它们插入到它的原始表中。当然,这将为我的应用程序节省所有能够检查所有已删除项目并确保删除所有层次结构的代码。
也许你有更好的方法/建议/想法来实现这样的事情!
【问题讨论】:
-
由于层次结构问题,我实际上会选择不太理想的#2。它将为您节省编码烦恼和永久的
where isdeleted<>1烦恼。 (这可能会稍微加快 sql server)