更新关系数据库中的数据,而不影响已经存在的关系
Posted
技术标签:
【中文标题】更新关系数据库中的数据,而不影响已经存在的关系【英文标题】: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?
【问题讨论】:
【参考方案1】:据我了解,您需要将随时间变化的产品属性(例如供应商、工作温度范围、单位成本)与不变的属性(例如描述、颜色、重量)区分开来。
调用保存不变属性的表ProductFixedAttributes
和保存可变属性的表ProductVariableAttributes
。那么你当前Products
表的一行是一对一的ProductVariableAttributes
和多对一的ProductFixedAttributes
,你可以删除Productattributes
表。
当产品的属性发生变化时,向Products
添加一个新行,该行指向ProductVariableAttributes
中的新行和ProductFixedAttributes
中的现有行。将此新行用于将来与新Contracts
的关联;不要更改Contracts_Products
中的现有行。
【讨论】:
以上是关于更新关系数据库中的数据,而不影响已经存在的关系的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 获取一个查询以检查 QueryBuilder 是不是存在两个关系中的至少一个而不忽略其他过滤器
如何编写python程序将csv数据文件导入关系数据库而不插入重复条目