我很好奇最佳做法是什么。例如,我们有产品实体,它有两个字段:价格和增值税。什么可以节省价格?基本价格,然后根据基准价格和增值税代码计算结果价格。或者保存计算价格并保存增值税仅供参考。
答案 0 :(得分:4)
没有增值税,因为它可以独立于价格而改变。
修改:顺便说一下,为什么要为每种产品存储增值税?不是更好地对您的产品进行分类(如果您有不同类型的增值税)吗?
答案 1 :(得分:2)
由于增值税可以更改,我建议在销售时存储基本价格和增值税百分比。然后,您可以根据需要报告的内容显示计算出的价格和增值税百分比。
答案 2 :(得分:1)
除此之外:英国的增值税标准税率将从2011年1月初的17.5%变为20%,任何解决方案都应该处理这种变化。
我之前使用的解决方案是:
产品:
NetPrice(MONEY,NOT NULL)
VATRateId(INT,NOT NULL,FK - > VATRate.VATRateID)VATRate
VATRateId(INT,PK NOT NULL)
说明(TEXT NOT NULL)VATRateValue
VATRateValueId(INT,PK NOT NULL)
VATRate(MONEY NOT NULL)
EffectiveToDate(DATETIME NULLABLE)
这样我可以存储产品X 的净价为1.00,增值税税率为{1,标准税率增值税},将适用以下税率{17.5%至2010 /年12/31,此后20%}
此解决方案无法满足的一点是,您要更改产品的价格,以确保无论当前的增值税率如何,价格始终保持在某个“价格点”,例如4.99。你可以在这里做些什么,因为最大限度的灵活性(复杂性增加)是将NetPrice字段从Product
实体移动到ProductPrice
实体:
<强> ProductPrice 强>
ProductPriceId(INT,PK NOT NULL)
ProductId(INT,NOT NULL,FK - &gt; Product.ProductId)
价格(金钱,非空) EffectiveToDate(DATETIME NULLABLE)
答案 3 :(得分:0)
英国的增值税在过去一年左右多次变化。我会将Base Price与变量VAT分开。
答案 4 :(得分:0)
产品价格最好不含增值税,因为已经提到增值税率可以独立改变价格,我工作的许多数据库都将增值税税率存储在一个单独的表中,然后通过拣货来计算价格+增值税增值税表中的增值税税率。
更改也更容易以这种方式实施,例如,如果增值税率从17.5%变为20%,您只需更改一行即可相应更新所有价格,而不是更改每个单独的价格。
答案 5 :(得分:0)
如果您存储价格+增值税,如果您更新增值税并忘记更新价格+增值税,则可以包含数据库的完整性。如果您存储原始价格,则不会发生这种情况。简而言之,最好不要存储可以通过行的列计算获得的值。
答案 6 :(得分:0)
在数据库中存储三个值的情况下,知道任何两个值可以计算第三个值,我有时会赞成存储所有三个值以及哪两个值是“真实的”以及哪一个是计算。这三个值应始终相等;如果他们不是,那么应该检查发生了什么,并确定原因。
例如,将时间戳存储为时区,UTC和本地时间以及“已知的”指示符可能很有用。例如,如果发现使用错误的时区记录了某些时间戳,则可以使用“已知的”指示符来确定是否应调整UTC或当地时间。
关于预期而非历史价格信息,我认为存储增值税专用价格,预期增值税和含增值税价格以及指示各种情景的模式标志可能会有所帮助,例如
基本上,弄清楚如果增值税发生变化会发生什么,并相应调整。