如何处理发票申请中的价格波动?
Posted
技术标签:
【中文标题】如何处理发票申请中的价格波动?【英文标题】:How to handle price fluctuations in an invoice application? 【发布时间】:2011-03-29 01:00:03 【问题描述】:在发票申请中,请考虑以下事项:
我有一个产品表,其中还包含产品的价格。然后我有一个 invoice 和 invoice_lines 表,在每个发票行中,我参考产品 ID 和数量。在这种情况下,我不会将产品价格与发票行一起存储。
现在几个月后,如果产品价格发生变化,任何报告都会显示基于当前价格的销售量,而不是产品实际销售的价格。
我想到的一个解决方案是,我们保留一个名为价格的单独表,该表链接到每个产品,并且每当产品的价格发生变化时,都会在此价格表中插入一条记录。此表中的最新记录始终被视为新发票的当前价格。每个发票行通过指示价格的 ID 来指示其价格,以便稍后在报告中正确显示。
处理此类情况的最佳做法是什么?
【问题讨论】:
【参考方案1】:将价格字段添加到发票行。
【讨论】:
是的,同意。我会将产品的当前价格存储在产品表中,并将销售时的价格存储在发票行中。 我也这样做了很长时间,因为我在这两个地方都有采购表和销售表,所以我必须保持价格..但这是最好的出路吗?【参考方案2】:我总是会在购买时针对每个订单项目存储实际名称、数量和价格,从而有效地对数据进行反规范化。订单是及时的快照,不应与可能发生变化的事物相关联。不仅价格会波动,而且如果您删除或重命名原始产品并且您的发票又与它相关,会发生什么情况?
【讨论】:
你能详细说明一下db结构吗?【参考方案3】:我会回应您的建议:将价格分成包含这些列的单独表格:
PriceId、ProductId、Price、StartDate、EndDate。
这样您还可以提前计划未来的价格变化。可以使用(Sql Server 语法)获取当前数据:
SELECT *
FROM Products
Inner Join Prices ON Products.ProductId = Prices.ProductId
And GetDate() Between StartDate and EndDate
【讨论】:
此方法的另一个优点是您可以捕获可能永远不会出现在发票上的价格变化。以上是关于如何处理发票申请中的价格波动?的主要内容,如果未能解决你的问题,请参考以下文章