Database design 在不影响现有关系的情况下更新关系数据库中的数据

Database design 在不影响现有关系的情况下更新关系数据库中的数据,database-design,relational-database,Database Design,Relational Database,数据库系统如何在包含部分历史的关系数据中进行更改?例如,在合同管理系统中,我有一份公司维护某些产品的维护合同。这些产品将与维护合同(在数据库中)链接。现在假设我在本合同中维护这些产品超过2年,并且产品属性突然发生变化,那么我需要更改有关产品的信息。但是如果我这样做,由于与合同的关系,信息会告诉我,我在产品的更改属性中维护了产品超过2年,这是不正确的 现在假设我有一个简单的契约和产品关系(M:M relationsip,因此需要契约和产品连接表)和另一个Productattributes,与产品(

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


现在假设我有一个简单的契约和产品关系(M:M relationsip,因此需要契约和产品连接表)和另一个Productattributes,与产品(M:1关系)相关。既然我没有更改任何关于合同的内容,也没有更改任何关于产品的内容,只更改Productattribute,那么有什么可能的解决方案可以使过去的关系保持不变,同时只更改未来的Productattribute

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

调用包含不变属性
ProductFixedAttributes
的表和包含可变属性
ProductVariableAttributes
的表。然后,当前
产品
表中的一行与
产品变量属性
为1对1,与
产品固定属性
为多对1,您可以删除
产品属性

当产品的属性发生更改时,向
Products
添加新行,该行指向
productVariableAttribute
中的新行和
productFixedAttribute
中的现有行。将此行用于将来与新的
合同的关联
;不要更改
合同\u产品
中的现有行