如何在订单明细表中保持销售价格?

时间:2019-07-01 16:25:11

标签: sql-server tsql

我正在编写一个简单的事务数据库来练习我的T-SQL技能。 如果我在sales.orderdetails表中出售了一把雨伞,并且从items表中获得了该雨伞的当前零售价格并将其放入发票中,那么从现在起6个月后,当我抬起顶杆时,如何避免历史报告数据不正确伞的零售价降低了10美元?

我如何将雨伞的销售价格存储在orderdetails表中,以便将来不受item表中任何更改的影响? 我知道您可以为数据仓库使用SCD来解决此类问题,但是我想知道如何在OLTP系统中进行操作。计算持久化列?当我尝试输入items.retailprice作为salesorderdetails.cost列的计算值时,似乎无法在对象浏览器中使用它。

2 个答案:

答案 0 :(得分:3)

我过去在不使用SCD之类的技术的情况下看到的方法是让订单明细具有所收取的价格,然后使用外键指向另一个包含产品或产品价格的表当前价格。

答案 1 :(得分:1)

在一个完整的交易系统中,您希望订单明细行记录完整的零售(建议零售价或您拥有的商品),当前价格(以防万一您当天以折扣价寄出该商品)。收取的价格(以防客户使用促销代码/优惠券代码自行降低价格)。除非您同时记录全部三个,否则无论价格如何变化,明天,下周或明年,您都会受其支配,这会导致不良的分析。

您可能还希望捕获当前的商品成本,因为这会随着时间的推移而发生变化,尤其是在平均成本计算中。否则,将无法计算保证金。

但是,是的,对于那些产品的短暂特性,外键或任何其他描述性表的键。