【发布时间】:2014-02-18 15:40:47
【问题描述】:
我有一个关于在某些情况下处理数据集的应用程序设计问题。
假设我有一个使用一些实体的应用程序。我们有一个订单,其中包含有关客户、截止日期等的信息。然后我们有一个与订单有一对多关系的服务实体。服务包含它的名称。除此之外,我们还有一个 Rule 实体,它设置了一些关于从材料库存中扣除什么的规则。它与Service实体是一对多的关系。
现在,我的问题是:如何处理这种情况,当我创建订单并将其保存到数据库中时,与它的关系,但同时,我不希望对发生的实体进行更改与生成的订单可见。我需要将订单和与之关联的数据视为某种日志,以便从表中删除服务或更改一组规则,不会更改已生成的订单、服务和期间使用的规则过程。
通常,我将如何处理该问题,将复制服务和规则,并将其插入新表中,以便数据独立于在订单生成期间使用的数据。 Order 只会指向重复的数据,而不是原始数据,这可以解决我的问题。但这是数据重复,而且我认为这不是最好的方法。
那么,如果你理解了我的问题,你知道解决这类问题的更好主意吗?如果我写的没有任何意义,我很抱歉。告诉我,我会努力用更好的方式表达自己。
【问题讨论】:
-
听起来您的订单需要在下订单时其他地方的字段值的快照。您的服务和规则表可以包含修订号列,以便订单引用修订以及数据,当您的 UI 认为它正在更改规则或服务时,它实际上是在添加具有更高修订号的新记录?
-
这是处理问题的一种非常有趣的方式。唯一的缺点是,您必须从不再引用的实体中清理数据库。
-
或者,如果这些更改是手动的,您可以无限期地保留它们,并且它们会成为您的配置管理的一部分(带有额外的列来跟踪谁、何时以及为什么)
-
我认为您必须复制信息。商店中显示的价格标签是动态的,但发票上显示的价格不会改变。您不需要复制所有内容,只需复制需要的内容即可。另一种选择是保留所有历史更改并存储 AsOf 日期“此订单使用 AsOf 此日期的信息”。
-
好吧,一切都取决于我想要多大的灵活性。谢谢两位的回答。你提出了一些非常有趣的建议。
标签: database database-design application-design