数据库设计:聚合与存储

时间:2010-12-22 15:05:31

标签: database-design

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

  • 项目(需要控制库存)
  • 股票走势:
    • 输入动作(它们累计到某些项目库存)
    • 输出变动(它们从某些项目库存减去)

哪种策略最好,原因如何:

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

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

注意:此问题与this other类似,但此问题特别关于可汇总的数据

1 个答案:

答案 0 :(得分:3)

选项B是标准化的 我已经在我为客户端制作的ERP中这样做了,使用Access作为前端,使用SQL Server作为后端。到目前为止,大约有250,000个动作,它仍然很活泼。

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

最适合我的方式:看看Allen Browne提供的问题的优秀分析here