我正在研究关于非活动行或不同词的软删除的优点和缺点。我发现双方都有一个很大的争论。但是,我决定在我的数据库设计中使用这种技术。
我已经停止了一个问题“我该如何处理由FK链接的关系数据?”。
将案例更新为无效。
当我在'T2'中更新一些ID时,是否需要在'T3'中将关系数据更新为无效?
那么如果更新会影响'T1'中的一行并且数据库更复杂呢?
关于软删除记录的数据管理怎么样?
选项1
我应该通过更新所有关系数据来管理吗?
OR
选项2
我应该在选择查询中管理吗?
'选项1'需要非常昂贵的查询吗?
非常感谢您的帮助。我希望我的问题有助于达到一定程度的问题质量。
答案 0 :(得分:1)
如果我是你,我会使用选项2.考虑一下您需要删除表中记录的频率与您需要读取记录的频率相比。绝对读取频率必须更多。 通过使用一些WHERE子句,可以在SELECT查询中轻松管理。 在c#中编写linq-to-sql或EF代码时,这种技术也非常方便。
答案 1 :(得分:1)
如果您的表格符合第二范式(2NF),那么如果您将T2中的记录标记为非活动(或软删除),则无需将T3中的子记录标记为非活动状态。根据2NF,T2中的非活动属性仅适用于T2,而不适用于T3。
答案 2 :(得分:1)
这取决于你想做什么。让我们假设你有这些表:order,orderitem,product。删除订单时,它将获取已删除的标志并保留在数据库中。因此,所有订单都被删除,但产品当然不是。您的业务逻辑需要了解对象之间的关系。
现在,这取决于删除订单商品时您想要做什么。它不一定需要软删除。只有订单。如果您仍想要软删除项目,则还必须为其添加已删除的标记。
删除产品时,您必须确保没有引用它的有效订单商品。同样,这取决于你想如何处理这种情况。你通常想阻止它。