【问题标题】:Updating data in relational database, without affecting the already existing relation更新关系数据库中的数据,而不影响已经存在的关系
【发布时间】:2015-01-10 08:42:47
【问题描述】:
数据库系统如何对包含部分历史的关系数据进行更改?例如,在合同管理系统中,我有一个公司维护一些产品的维护合同。这些产品将与维护合同相关联(在数据库中)。现在假设我在这个合同中维护了这些产品超过2年,突然产品属性发生变化,那么我需要更改产品信息。但是如果我这样做,由于与合同的关系,信息会告诉我,我将产品在其更改的属性中维护了 2 年以上,这是不正确的!
现在假设我有一个简单的 Contracts 和 Products 关系(M:M 关系,所以需要 Contracts_Products 联结表)和另一个 Productattributes,与 Products 的关系(M:1 关系)。由于我没有更改 Contract 的任何内容,也没有更改 Product,只是 Productattributes,有什么可能的解决方案来保持与过去相同,而只为即将到来的时间更改 Productattribute?
【问题讨论】:
标签:
database-design
relational-database
【解决方案1】:
据我了解,您需要将随时间变化的产品属性(例如供应商、工作温度范围、单位成本)与不变的属性(例如描述、颜色、重量)区分开来。
调用保存不变属性的表ProductFixedAttributes 和保存可变属性的表ProductVariableAttributes。那么你当前Products 表的一行是一对一的ProductVariableAttributes 和多对一的ProductFixedAttributes,你可以删除Productattributes 表。
当产品的属性发生变化时,向Products 添加一个新行,该行指向ProductVariableAttributes 中的新行和ProductFixedAttributes 中的现有行。将此新行用于将来与新Contracts 的关联;不要更改Contracts_Products 中的现有行。