库存数据库与库存水平跟踪 - 如何在结账前实施库存检查

3

我正在为一个库存管理应用程序设计数据库,该应用程序将处理物品的库存水平跟踪和结账订单提交和处理。 目前,我已经有以下表格:

  • 一个具有以下列的Item表:
    • 物品id
    • 描述
    • 初始库存水平
    • 其他相关信息
  • 一个具有以下列的Order表:
    • 订单id
    • 订单日期
    • 客户id
  • 一个具有以下列的Order_detail表:
    • 订单详细id
    • 订单id
    • 物品id
    • 数量
  • 通过使用Transactions_in_out表来跟踪库存水平,每次处理订单或补充库存时,都会向该表中插入一条记录,以表示它是一个收入还是支出交易。
    • 交易id
    • 物品id
    • 交易类型(收入/支出)
    • 数量
    • 个体价格

我的问题是,在处理订单并插入输出事务之前,我想检查库存水平是否足够,并在插入事务后激活低库存警报(虽然这是另一种问题)。目前唯一的方法是重新计算当前库存水平!如果我的表按计划增长,这将对性能产生可怕的影响。有什么简单的方法吗?

1个回答

4
我会更新项目/产品表,以包括一个current_stock_level列。该列将有一个检查约束,以确保它始终是>= 0
完成此操作后,插入订单的事务将需要根据订购数量减少库存水平。如果有人订购的库存量超过可用库存,则他们将违反约束并收到错误信息。
如果您想验证交易的库存水平,请保留initial_stock_level列。然后,您可以运行每日/每周/随时的流程,以验证这个值减去订单总数是否等于当前库存水平。如果存在差异,则可以更新当前级别或提醒某人调查此事。
一旦成功完成此验证过程,请更新initial_stock_level为当前级别。还要包括一个stock_level_verified日期,以指示上次运行此操作的时间。
请注意,如果您的系统全天候不间断使用,可能会遇到并发问题,因为在您执行此检查过程时,人们可以减少库存。您需要考虑如何管理这种情况。

我本来希望能够避免实现这个功能,因为如果出现任何差错,即使进行纠正处理也已经为时过晚,而我又不想依赖保存的当前库存字段。我希望能够有一种单一的流程来进行库存检查/更新。难道没有更简单的方法吗? - kfc
这取决于你对不超过可用库存的要求有多严格。DB检查约束将确保它不能低于0。你可以制作每日交易摘要并从中计算增量,而不是依赖当前库存水平。但你需要自己实施检查以验证人们未订购超过可用数量,这会增加处理相同产品的并发订单时出现错误的机会。 - Chris Saxon
请记住,无论您采取哪种方法,都需要某种形式的校正过程。库存可能会被盗窃、损坏或仅仅是计数错误,因此数据库中的值可能与您实际拥有的价值不完全匹配。您需要一些调整过程来处理这个问题。 - Chris Saxon
仅凭我的直觉,我可能会采用您提出的解决方案,并考虑同步访问更新当前库存字段的代码以处理并发问题。 - kfc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接