我正在建立一个简单的电子商务网站,我对订单确认和创建有一些疑问......
这是good practices
的问题,然后是一个真正的问题......
我是否应该:计算总订单价值,并在数据库中插入,或者我应该在每次读取订单/ dosomething时计算它?
由于
答案 0 :(得分:3)
数据库目录中的最佳实践意味着标准化数据,并且存储可以计算的值违反了该数据。
你永远不会存储你可以计算的东西,除非你绝对确定这两个值之间不会有差异。
例如,如果您的订单包含两个100美元的商品但订单设置为150美元,您认为会发生什么?
有时,存储可以以其他方式计算的值的理由(通常与性能相关)但性能增益必须是重要和必要,和可能性不一致的要么被删除或计划用于。
您可以删除触发器或物化视图等内容,或者您可以通过更改业务逻辑来检测和修复问题,或者通过其他方式来规划它们。
但通常,性能提升不值得减轻潜在问题的额外努力。毕竟,你看到数百万个别项目的订单数量是多少?除了美国国防部,当然: - )
答案 1 :(得分:3)
在您的交易数据库(即主要数据库)中,您不应存储计算值。总结十几行是没有的。
但是,在您的分析数据库(也称为商业智能数据库,数据仓库)中,您应该存储计算的总数。
答案 2 :(得分:1)
作为一种良好做法,您不应存储可从表中现有列派生的值。
有许多理由不这样做,例如
如果要更新任何基础列,则还必须更新派生列。
表的大小将会增加