无数据重复的数据库模型设计

时间:2016-10-28 20:39:36

标签: database-design

我想设计以下数据模型:
我有一个Document对象,他有一个客户端DocumentLines 每行包含Item及其数量和价格(参见附图中的第一行) 在文档中,我想显示行以及项目的部件号,描述和日期代码。

enter image description here

问题时间

到目前为止,这么好。我可以使用数据关系仅附加相关对象的ID来关联它 但是!让我们想象一下这个场景

我有A = { part_number: 'pn1', description: 'my item', date_code: 2015}项,其已被输入DocA

当我输入DocA时,我看到客户购买了日期代码为2015的pn1 现在,在重新库存此商品时,我们会获得该商品的更新日期代码 它不再是2015年,而是2016年 所以我更新了我的项目:A = { part_number: 'pn1', description: 'my item', date_code: 2016}现在,当我输入DocA时,我发现客户已购买日期代码为2016的A !! 这是错的! 订单的详细信息应保持不变,不得动态更改。

而且,如果我删除A会怎样?我会在DocA看到什么?

问题

如何解决我的谜题,还有一个补充:
我需要允许更改文档中的项目细节更改 意思是,为特定文档添加一些特殊内容(而不是行注释)。

我提出的(当前解决方案)是复制DocumentLine对象中所需的数据。
虽然这看起来很错误,但我无法想出更好的解决方案。

我想听听你的意见。

1 个答案:

答案 0 :(得分:1)

至于问题的第一部分,你展示了一个好的设计。但是,Item的一个属性是volatile,您需要在创建文档时保持该值。有几种方法可以解决这个问题。最简单的方法是将值复制到DocumentLine表中,并在创建文档行时使用当前值填充它。因此,当Item值更改时,副本将保留原始值。这必须有详细记录,以便人们知道发生了什么。

问题的第二部分有点难度。零件编号和描述是否也不稳定?这看起来并不正确。您是否希望能够更改为其他项目?你已经有了。只需更新到新的商品编号和数量&价格根据需要。如果它是您需要的其他东西,那么您必须让我们更好地了解它是什么。