如何处理回溯日期的库存数量变化
How to handle change in Inventory Quantity on a backdate
我的数据库有 2 tables
1. INVENTORY 属性为 ID, Name, QOH(即 Quantity on Hand)
- 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 字段。
如何支持允许输入回溯库存数量的功能?任何帮助将不胜感激。
问题
首先你需要了解这个问题,它是什么,它是你造成的。之后我们会有不同的上下文,可以讨论可能的解决方案。
Inventory
是不变的、永久的事实table。这个想法是,在任何时间点,如果建筑物冒烟,table 最终确定公司库存的位置。
InventoryAdjustment
table只是针对公司存货的交易,针对Inventory
table。它可能被命名为 Transaction
.
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
值现在无论如何都被视为错误。记录它们没有,现在也没有任何价值。但是你确实记录了它们。现在他们需要更新。
编码。
我的数据库有 2 tables 1. INVENTORY 属性为 ID, Name, QOH(即 Quantity on Hand)
- 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 字段。
如何支持允许输入回溯库存数量的功能?任何帮助将不胜感激。
问题
首先你需要了解这个问题,它是什么,它是你造成的。之后我们会有不同的上下文,可以讨论可能的解决方案。
Inventory
是不变的、永久的事实table。这个想法是,在任何时间点,如果建筑物冒烟,table 最终确定公司库存的位置。InventoryAdjustment
table只是针对公司存货的交易,针对Inventory
table。它可能被命名为Transaction
.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 天或其他时间。
- 添加一个功能以允许特权用户(例如,谁已被授予 "supervisor" 权限,以允许此操作)
当交易执行时,它会按照通常的方式调整
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
值现在无论如何都被视为错误。记录它们没有,现在也没有任何价值。但是你确实记录了它们。现在他们需要更新。
编码。