2

我正在建立一个简单的电子商务网站,我对订单确认和创建有一些疑问......

这更像是good practices一个真正的问题......

我应该:计算总订单价值,然后插入数据库,还是应该在每次阅读/处理订单时计算它?

谢谢

4

3 回答 3

3

数据库领域的最佳实践意味着标准化数据,而存储可以计算的值违反了这一点。

除非您绝对确定这两个值之间不会存在差异,否则您永远不应该存储您可以计算的东西。

例如,如果您的订单包含两个 100 美元的商品,但订单设置为 150 美元,您认为会发生什么?

有时,存储可以通过其他方式计算的值是有理由的(通常与性能相关),但性能增益必须既重要必要,并且消除或计划出现不一致的可能性。

您可以使用触发器或物化视图之类的东西来消除这种可能性,或者您可以通过更改业务逻辑来检测和修复问题或通过其他方式来规划它们。

但通常,性能提升不值得为减轻潜在问题而付出额外努力。毕竟,您看到多少个订单,上面有数百万个单独的项目?当然,除了美国国防部:-)

于 2012-08-17T05:42:37.487 回答
3

在您的事务数据库(即主数据库)中,您不应存储计算值。总结十几行是什么。

但是,在您的分析数据库(又名商业智能 db-,数据仓库)中,您绝对应该存储计算的总数。

于 2012-08-17T05:45:29.477 回答
1

作为一种好的做法,您不应该存储可以从表中现有列派生的值。

不这样做的原因有很多,例如

  1. 如果要更新任何基础列,则还必须更新派生列。

  2. 表的大小将增加

等等……等等……

于 2012-08-17T05:54:08.357 回答