在关系数据库中,处理从对象图中删除对象同时仍保留引用完整性的最佳方法是什么?在某些时候,这必须发生。通过软删除或硬删除。
例如,当产品被删除时,确保包含该产品的订单仍然相关,或者确保包含该产品的订单的发票仍然相关的最佳方法是什么?
最佳答案
基本上有 3 个“标准解决方案”:
解决方案 1
您需要该产品(就像您的情况一样,因为发票引用了该产品)。这意味着数据有效,唯一的变化是它“缺货”或“缺货”。在任何情况下,您的业务流程通常需要您处理 RMA 情况或一些 IRS 相关事宜,例如……这意味着不得删除该产品。这只是产品的不同“状态”,需要通过数据库数据模型等来反射(reflect)。
如果您关心性能,请进行一些分析...如果需要,您有多种优化选项...这些通常依赖于 RDBMS,其中一种技术是“分区” - 每个 RDBMS 都有自己不同的机制灵活性等。
解决方案 2
您根本不需要任何数据...只需执行级联删除即可完成...
解决方案 3
您只需要历史数据,但“ future 的业务流程”将不再需要该实体(即产品)...在这种情况下,常见的解决方案是在对“进行级联删除”之前填充存档表。活跃/生产表”。此方案的一个细微变化是将所需信息复制到“相关行”(在您的情况下是发票),然后删除事件/生产行(即在您的情况下是产品)。
结论
复杂的系统处理许多不同的业务流程/用例,因此倾向于采用所有上述技术 - 每个技术都有其自己的位置,具体取决于所涉及的特定业务流程/用例...
关于relational-database - 从对象图中删除对象,同时保持完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9896674/