【问题标题】:Insert Total value of order, or calculate every time?插入订单总价值,还是每次都计算?
【发布时间】:2012-08-13 13:49:40
【问题描述】:

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

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

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

谢谢

【问题讨论】:

  • 这取决于数据库布局。我想说两种解决方案都很好。我认为没有最佳做法。
  • @Nemoden 好的...我想在这里问这些问题,因为有时会出现我不知道的问题...例如“不要将地址表与订单表链接”.. .(因为用户可以编辑地址)...谢谢=]

标签: php database database-design e-commerce


【解决方案1】:

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

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

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

有时,存储可以通过其他方式计算的值是有理由的(通常与性能相关),但性能增益必须是显着必要的,已删除或计划中的不一致。

您可以通过触发器或物化视图等方式消除这种可能性,或者您可以通过更改业务逻辑以检测和修复问题或通过其他方式进行规划。

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      有很多理由不这样做,例如

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

      2. 表格的大小会增加

      等等..等等..

      【讨论】:

        猜你喜欢
        • 2020-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-20
        • 2014-03-29
        • 1970-01-01
        • 2013-12-17
        • 2021-05-13
        相关资源
        最近更新 更多