更新关系数据库中的数据,而不会影响已存在的关系

时间:2014-11-13 09:03:01

标签: database-design relational-database

数据库系统如何在包含部分历史记录的关系数据中进行更改?例如,在合同管理系统中,我与公司签订维护合同以维护某些产品。这些产品将与维护合同(在数据库中)链接。现在假设我在这份合同中维护了这些产品超过2年,并且突然产品属性发生变化,那么我需要更改有关产品的信息。但是如果我这样做,由于与合同的关系,信息会告诉我,我将产品保留在其中已经改变了属性,超过2年,这是不正确的! / p>

现在假设我有一个简单的合同产品关系(M:M关系,因此需要 Contracts_Products 联结表)和另一个< em> Productattributes ,与 Products (M:1关系)有关。由于我没有改变契约的任何内容,无论是产品,还是 Productattributes ,有哪些可能的解决方案来保持关系过去相同,而只是为即将到来的时间更改 Productattribute

1 个答案:

答案 0 :(得分:0)

根据我的理解您的要求,您需要将随时间变化的产品属性(例如,供应商,工作温度范围,单位成本)与不变的产品(例如,描述,颜色,重量)分开。

调用包含不变属性ProductFixedAttributes的表和包含可更改属性ProductVariableAttributes的表。然后,当前Products表的一行与ProductVariableAttributes一对一,ProductFixedAttributes多对一,您可以删除Productattributes表。< / p>

当产品的属性发生变化时,向Products添加一个新行,指向ProductVariableAttributes中的新行和ProductFixedAttributes中的现有行。将此新行用于将来与新Contracts的关联;请勿更改Contracts_Products中的现有行。