【问题标题】:Database design: Aggregate vs Store数据库设计:聚合与存储
【发布时间】:2010-12-22 15:05:30
【问题描述】:

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

  • 物品(需要控制库存)
  • 库存变动:
    • 输入移动(它们加起来就是特定的商品库存)
    • 输出变动(它们从某些项目库存中减去)

哪个是最好的策略以及为什么:

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

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

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

【问题讨论】:

  • 这两种情况都可能是有效的,但也总是可以选择两者兼而有之 - 在可用于审计和详细检查的单独表中记录移动,在聚合主表中记录整体状态。

标签: database-design


【解决方案1】:

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

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

对我来说最好的方法:查看 Allen Browne 对问题的出色分析here

【讨论】:

    猜你喜欢
    • 2015-12-22
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    相关资源
    最近更新 更多