数据库系统如何在包含部分历史的关系数据中进行更改?例如,在合同管理系统中,我有一份维护合同,为公司维护一些产品。这些产品将与维护合同(在数据库内)连接。现在假设我在这个合同中维护了这些产品超过2年,突然之间产品属性发生了变化,那么我需要更改有关该产品的信息。但是如果我这样做的话,由于与合同的关系,信息会告诉我,我在它更改的属性中维护了产品,时间超过了2年,这不是真的!
现在假设我有一个简单的契约和产品关系(M:M关系,因此需要Contracts_Products连接表)和另一个产品属性(M:1关系)。由于我没有更改任何关于合同的内容,也没有对Productattribute进行任何更改,那么有什么可能的解决方案可以使过去的关系保持不变,同时只在接下来的时间更改Productattribute?
发布于 2014-11-19 20:41:00
正如我理解您的需求一样,您需要将随时间变化的产品特性(例如供应商、操作温度范围、单位成本)与不变的特性(例如描述、颜色、重量)分开。
调用保存不变属性ProductFixedAttributes的表和持有可变属性ProductVariableAttributes的表。然后,当前Products表的一行与ProductVariableAttributes为1:1,多到1为ProductFixedAttributes,您可以删除Productattributes表。
当产品的属性发生变化时,向Products中添加一个新行,该行指向ProductVariableAttributes中的新行和ProductFixedAttributes中的现有行。在未来与新Contracts的关联中使用此新行;不要更改Contracts_Products中的现有行。
https://stackoverflow.com/questions/26904894
复制相似问题