我想设计以下数据模型:
我有一个Document
对象,他有一个客户端DocumentLines
每行包含Item
及其数量和价格(参见附图中的第一行)
在文档中,我想显示行以及项目的部件号,描述和日期代码。
到目前为止,这么好。我可以使用数据关系仅附加相关对象的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
对象中所需的数据。
虽然这看起来很错误,但我无法想出更好的解决方案。
我想听听你的意见。
答案 0 :(得分:1)
至于问题的第一部分,你展示了一个好的设计。但是,Item的一个属性是volatile,您需要在创建文档时保持该值。有几种方法可以解决这个问题。最简单的方法是将值复制到DocumentLine表中,并在创建文档行时使用当前值填充它。因此,当Item值更改时,副本将保留原始值。这必须有详细记录,以便人们知道发生了什么。
问题的第二部分有点难度。零件编号和描述是否也不稳定?这看起来并不正确。您是否希望能够更改为其他项目?你已经有了。只需更新到新的商品编号和数量&价格根据需要。如果它是您需要的其他东西,那么您必须让我们更好地了解它是什么。