2010-08-12 81 views
5

在开具发票的应用程序中,请考虑以下内容:如何处理发票申请中的价格波动?

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

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

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

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

回答

1

将价格字段添加到发票行。

+0

是的,同意了。我会将产品的当前价格存储在产品表格中,并将销售时的价格存储在发票行中。 – wadesworld 2010-08-12 16:28:40

+0

我也一直这样做很长时间因为我在两个地方购买表和销售表,我必须保持价格..但这是最好的出路吗? – 2018-01-05 11:41:57

5

我会始终在购买时根据每个订单项目存储实际的名称,数量和价格,从而有效地对数据进行非标准化。订单在时间上是一个快照,不应该回到可以改变的东西上。价格不仅会波动,而且如果您删除或重命名原始产品并将发票与其相关联,会发生什么情况?

+0

能否详细说明db结构。 – 2018-01-05 11:45:35

1

我要重申你的建议:打破了价格到一个单独的表,这些列:

PriceId,产品编号,价格,起始日期,结束日期。

这样你也可以提前计划未来的价格变化。当前数据可以使用(Sql Server语法)获得:

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

此方法的另一个优点是您可以捕获可能永远不会显示在发票上的价格变化。 – bobs 2010-08-12 20:27:23