如何处理回溯日期的库存数量变化

How to handle change in Inventory Quantity on a backdate

我的数据库有 2 tables 1. INVENTORY 属性为 ID, Name, QOH(即 Quantity on Hand)

  1. INVENTORY_ADJUSTMENT 属性为 Date、AdjQty、QOH、Notes

每次出售或购买库存物品时,我都会在 INVENTORY_ADJUSTMENT 中进行输入。此时我还计算手头库存并更新 INVENTORY 和 INVENTORY_ADJUSTMENT.

中的 QOH

到目前为止,这一切都很好。但是现在一些客户有一个要求,他们想回溯一个月并更新手头的数量。例如:4 月 10 日,用户可以返回并更改 3 月 1 日的 QOH。如果这被允许,那么我在 3 月 1 日到 4 月 10 日期间在 INVENTORY_ADJUSTMENT table 中所做的每个条目也需要更新,因为 INVENTORY_ADJUSTMENT 的每一行都有现在将不同步的 QOH 字段。

如何支持允许输入回溯库存数量的功能?任何帮助将不胜感激。

问题

首先你需要了解这个问题,它是什么,它是你造成的。之后我们会有不同的上下文,可以讨论可能的解决方案。

  1. Inventory是不变的、永久的事实table。这个想法是,在任何时间点,如果建筑物冒烟,table 最终确定公司库存的位置。

  2. InventoryAdjustmenttable只是针对公司存货的交易,针对Inventorytable。它可能被命名为 Transaction.

  3. InventoryAdjustment.QoH 列是重复的列。 QoH 已存在于 Inventory 中。当您创建一个重复的列时,您有:

    • 破坏规范化规则(因此你有一个众所周知的经典错误,我们被要求避免,并且会产生后果)。您的 table 不再规范化,您的数据库不是数据库。

    • 引入了更新异常。这意味着您必须在不止一个地方更新数据(即真实值的单一版本),否则两个(或更多)项将得到 "out of synch"。这个想法是,首先不要创建副本。

    • 如果您实施它是为了提供 运行 总计(InventoryAjustment.QoH, 连续行),您就是在自欺欺人。 运行 总数(Inventory.QoH 加上当前行之前的所有调整)很容易在 SQL 代码中提供。有需要请自取

现在你已经习惯了这种错误的状态,你不认为它是错误的,到现在已经"worked just fine"了。所以你可能很难接受这是一个错误。我会把它留给你去克服。

  • 关键术语是"up to now"。传统上,只有在暴露错误或用户想要更改某些内容时,此类错误才会成为问题。所以首先,他们需要被曝光和了解他们是什么。

  • 刚刚发生的事件,上面已经触发了

解决方案

  • 删除 InventoryAdjustment.QoH 列。

  • 每当插入 InventoryAdjustment 行时,保留 Inventory.QoH 列的重新计算和更新。

  • 现在 Inventory.QoH 列是 true,而且一直都是 true。它反映了仓库中当前的确切 QoH。

  • 不需要"synching",因为档案中没有真相的两个版本,或一个真相的两份副本。

故事结束。

新用户要求

Now some of the clients have a requirement where they want to go back a month and update the quantity on hand. How do I support the feature of allowing back dated inventory quantities to be entered?

  • 现在更正的数据库处理得很好。

    • 请注意,由于数据库已更正,因此只有一个 QoH。如果没有更正,我们将不得不停下来问:

      Which QoH do they wish to update, the running total, or the real one, or both ?
      What purpose does it serve ?

  • 该应用程序需要稍作调整。我假设当前函数将 InventoryAdjustment.Date 设置为插入前的当前日期。

    • 添加一个功能以允许特权用户(例如,谁已被授予 "supervisor" 权限,以允许此操作)set InventoryAdjustment.Date 中的有效日期过去,将其限制为(例如)30 天或其他时间。
  • 当交易执行时,它会按照通常的方式调整Inventory.QoH

故事结束。

(如果不是,则表明有相关细节尚未传达。请这样做。)

创可贴

如果您不理解 (a) 错误的性质,以及 (b) 更正的准确性,即。你很高兴保留它,那么...

If this were to be allowed, then every entry I had made in the INVENTORY_ADJUSTMENT table between 1st March and 10th April would need to be updated as well, since each row of INVENTORY_ADJUSTMENT has the QOH field which will now be out of sync.

是的。

这是更新异常的结果。调整后项目的所有重复 InventoryAdjustment.QoH 值现在无论如何都被视为错误。记录它们没有,现在也没有任何价值。但是你确实记录了它们。现在他们需要更新。

编码。