relational-database - 从对象图中删除对象,同时保持完整性

标签 relational-database data-integrity object-graph

在关系数据库中,处理从对象图中删除对象同时仍保留引用完整性的最佳方法是什么?在某些时候,这必须发生。通过软删除或硬删除。

例如,当产品被删除时,确保包含该产品的订单仍然相关,或者确保包含该产品的订单的发票仍然相关的最佳方法是什么?

最佳答案

基本上有 3 个“标准解决方案”:

解决方案 1

您需要该产品(就像您的情况一样,因为发票引用了该产品)。这意味着数据有效,唯一的变化是它“缺货”或“缺货”。在任何情况下,您的业务流程通常需要您处理 RMA 情况或一些 IRS 相关事宜,例如……这意味着不得删除该产品。这只是产品的不同“状态”,需要通过数据库数据模型等来反射(reflect)。

如果您关心性能,请进行一些分析...如果需要,您有多种优化选项...这些通常依赖于 RDBMS,其中一种技术是“分区” - 每个 RDBMS 都有自己不同的机制灵活性等。

解决方案 2

您根本不需要任何数据...只需执行级联删除即可完成...

解决方案 3

您只需要历史数据,但“ future 的业务流程”将不再需要该实体(即产品)...在这种情况下,常见的解决方案是在对“进行级联删除”之前填充存档表。活跃/生产表”。此方案的一个细微变化是将所需信息复制到“相关行”(在您的情况下是发票),然后删除事件/生产行(即在您的情况下是产品)。

结论

复杂的系统处理许多不同的业务流程/用例,因此倾向于采用所有上述技术 - 每个技术都有其自己的位置,具体取决于所涉及的特定业务流程/用例...

关于relational-database - 从对象图中删除对象,同时保持完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9896674/

相关文章:

mysql - 构建gwas阵列数据库

MySQL多对多关系匹配

delphi - 如何检测表是否在我的应用程序之外添加或删除了行?

ios - CoreData 逆向关系是否应该表示为保留属性?

Java 对象图访问者库

database - Postgresql 数据库的文件存储系统

mysql - 在导入 MySQL 时将校验位从数字拆分为单独的列

git - 如何验证 git merge 不包含额外的更改?

security - TLS 是否确保 RESTful Java 企业中数据传输的消息完整性和 secret 性

api - 用于更新对象图的 REST API 设计