如何处理发票申请中的价格波动?

时间:2010-08-12 16:21:24

标签: database-design invoice

在发票应用程序中,请考虑以下事项:

我有一个产品表,其中也包含产品的价格。然后我有一张发票和invoice_lines表,在每个发票行中,我都会参考产品ID和数量。在这种情况下,我不会将产品的价格与发票行一起存储。

现在几个月后,如果产品价格发生变化,任何报告都会根据当前价格而不是实际销售产品的价格显示销售量。

我想到的一个解决方案是,我们保留一个名为价格的单独表格,链接到每个产品,每当产品价格发生变化时,记录都会插入此价格表中。此表中的最新记录始终被视为新发票的当前价格。每个发票行通过指示价格的ID来指示其价格,以便稍后在报告中正确显示。

处理此类情况的最佳做法是什么?

3 个答案:

答案 0 :(得分:5)

我会在购买时始终存储每个订单商品的实际名称,数量和价格,从而有效地对数据进行反规范化。订单是及时拍摄的,不应与可能发生变化的事物相关联。价格不仅会波动,而且如果您删除或重命名原始产品并且您的发票与之相关,会发生什么?

答案 1 :(得分:1)

在发票行中添加价格字段。

答案 2 :(得分:1)

我会回应你的建议:将价格分成一个单独的表格,其中包含以下列:

PriceId,ProductId,Price,StartDate,EndDate。

通过这种方式,您还可以提前计划未来的价格变动。可以使用(Sql Server语法)获取当前数据:

SELECT *
FROM Products
   Inner Join Prices ON Products.ProductId = Prices.ProductId 
      And GetDate() Between StartDate and EndDate