数据库设计:聚合与存储

问题描述 投票:0回答:1

在库存控制系统中,数据库中记录以下实体(当然这过于简化了):

  • 商品(需要控制库存)
  • 股票走势:
    • 输入变动(它们加起来构成某些商品库存)
    • 输出变动(从某些商品库存中减去)

哪个是最好的策略以及原因:

  • 存储每个商品的当前数量,并在每次记录移动时更新它。
  • 不要存储每个项目的当前数量,并在每次需要时计算,因为
    item.current_qty = sum(item.input_movements.qty) - sum(item.output_movements.qty
    (这不是特定的语言,只是伪代码)

考虑到,作为库存控制系统,每个项目的当前数量都会被大量使用。

注意:这个问题与this other类似,但是这个问题特别是关于可以聚合的数据

database-design
1个回答
4
投票

选项 B(计算)是标准化选项。
我在为客户制作的 ERP 中就是这样做的,使用 Access 作为前端,SQL Server 作为后端。迄今为止,已有大约 250.000 次动作,而且仍然很快。

我认为这有点取决于您的卷以及您使用的数据库引擎。例如,如果是 Access,则没有触发器,我不会依赖前端逻辑。在 SQL Server 上,您可以非规范化并在每次移动时重新计算现有数量,并最终在出现问题时重新计算。

对我来说最好的方法:参见艾伦·布朗对问题的精彩分析这里

© www.soinside.com 2019 - 2024. All rights reserved.