1

sum()我想知道在字段中存储求和值与在单独的表上执行操作的优缺点。一个示例是检索项目列表以及每个项目的购买次数。在这种情况下,可以有一张Items桌子和Purchases 一张桌子,它们的购买量需要相加。

求和值的优点:

  • 更简单、更快的 SQL 语句(JOIN不需要,例如Items.item_id=Purchases.item_id

的优点sum()

  • 不必维护 2 种方法来获取可能不同步的值,因为它们需要 anUPDATE INSERT语句来更改它们(例如,表中的INSERT购买.PurchasesUPDATEpurchase_countItems
4

2 回答 2

2

这样的问题没有正确的答案。答案完全取决于数据的使用方式。

两个极端。如果您很少查询数据并且对历史数据有很多更改,那么您的系统可能会花费大量精力来保持总和的一致性,而不需要它们。

另一方面,如果数据是“仅插入的”,并且每条记录都用总和重复检索,那么总和会节省工作量。

一般来说,倾向于更规范化的方法——即sum()在查询时执行而不是将其作为业务规则维护。一个明显的优势是这些值随着时间的推移是一致的。

第二个优势是分析可以变化。也许今天您需要计数项目。也许下周,您需要计算单位数。和美元的计数。或净价差。这些随着时间而改变。试图预先捕捉它们是具有挑战性的。这里的解决方案是将问题分成两部分。将标准化数据(没有神奇的总和)存储在一个“数据库”中。将摘要存储在“数据集市”中,可以对其进行修改以满足最终用户的目标。数据集市将定期更新——每天一次或每周一次。

具有周期摘要的标准化基础数据是一种强大的架构,可以满足许多需求。insert但是,在某些情况下,在//而不是 on 上进行计算确实是一个更好的主意update。因为这样的解决方案通常涉及更多的复杂性(instane 的多个触发器),所以它必须通过更规范化的解决方案来证明自己的合理性。deleteselect

维基百科:数据库规范化

于 2013-06-11T11:41:37.053 回答
1

这取决于应用程序的性质和用途。

您应该计算或查看使用情况(对于现有应用程序)哪些查询更频繁。DML 类型的查询:

  • 总和值法:适用于SELECT浏览商品和显示商品信息的更多查询 -例如常规电子商店
  • 使用 sum() 方法:适用于更多UPDATE/INSERT查询 -例如主要包括管理商店库存的重型商店应用程序。
于 2013-06-11T10:08:35.400 回答