数据库设计最佳实践 - 订单处理数据库 - 产品更新可以有效地更改已关闭的发票

时间:2011-06-02 10:53:42

标签: database-design

在对这里的最佳实践有所了解之后。

我正在建立一个订单处理数据库,用于管理库存,订单和发票。

到目前为止,在我的设计中,发票和订单都有对产品表的外键引用。如果在创建订单/发票后要更新产品,则如果再次查看,则可以更改rder / invoice上的项目列表。

我打算通过创建一个“OrderItems”表来管理它,该表存储产品数据的不可变副本,就像创建订单/发票时一样,并且订单引用此表而不是可更改的产品表。

这是处理此问题的常用方法 - 还有另一种方法吗?

由于

2 个答案:

答案 0 :(得分:9)

这与数据仓库中的“缓慢变化的维度”问题有关。有六种标准解决方案。

http://en.wikipedia.org/wiki/Slowly_changing_dimension

您的“冻结副本”类似于Type 4算法。

答案 1 :(得分:2)

需要明确区分产品的价格,可能是其默认价格(在产品表中)和实际销售的价格(在InvoiceLine表中保存)。