首页 文章

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

提问于
浏览
2

我的数据库有2个表1.清单属性为 ID, Name, QOH (即手头的数量)

  • INVENTORY_ADJUSTMENT属性为 Date, AdjQty, QOH, Notes

每次出售或购买库存物品时,我都会在INVENTORY_ADJUSTMENT中输入一个条目 . 此时我还计算库存并更新INVENTORY和INVENTORY_ADJUSTMENT中的QOH .

到目前为止,这一切都很好 . 但现在一些客户有一个要求,他们想要回去一个月并更新手头的数量 . 所以对于ex:4月10日,用户可以返回并更改3月1日的QOH . 如果允许这样做,那么我在3月1日到4月10日之间在INVENTORY_ADJUSTMENT表中创建的每个条目也需要更新,因为INVENTORY_ADJUSTMENT的每一行都有QOH字段,现在它将不同步 .

如何支持允许输入过时库存数量的功能?任何帮助都感激不尽 .

1 回答

  • 2

    问题

    首先,您需要了解问题,问题是什么,以及您是否已创建问题 . 之后我们将有不同的背景,并可以讨论可能的解决方案 .

    • Inventory 是硬性的,永久性的事实表 . 这个想法是,在任何时候,如果建筑物冒烟,表格最终确定公司库存的位置 .

    • InventoryAdjustment 表只是针对 Inventory 表的公司库存的交易 . 它可能被命名为 Transaction .

    • InventoryAdjustment.QoH 列是重复列 . QoH 已存在 Inventory 中 . 创建重复列时,您具有:

    • 破坏了规范化规则(因此您有一个众所周知的经典错误,我们被命令避免,并且会产生后果) . 您的表不再标准化,您的数据库不是数据库 .

    • 引入了更新异常 . 这意味着你必须在多个地方更新数据(真值的单一版本的值),否则两个(或更多)项目会“不同步” . 这个想法是,不要首先创建副本 .

    • 如果你已经实现它以提供一个总计(连续行中的 InventoryAjustment.QoH, ),你一直在欺骗自己 . 在SQL代码中可以轻松提供运行总计( Inventory.QoH 以及直到当前行的所有调整) . 如果需要,请求它 .

    现在你已经习惯了这种错误的事态,你不认为它是一个错误,它到现在为止“工作得很好” . 所以你可能很难接受这是一个错误 . 我会离开你,让你克服 .

    • 关键词是“到现在为止” . 传统上,只有在暴露错误或用户想要更改某些内容时,才会出现此类错误 . 首先,他们需要被揭露和理解他们是什么 .

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

    解决方案

    • 删除 InventoryAdjustment.QoH 列 .

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

    • 现在 Inventory.QoH 列是 true ,它始终是真的 . 它现在反映了仓库中的确切QoH .

    • 不需要“同步”,因为没有两个版本的真相,或一个真相的两个副本,存档 .

    故事结局 .

    新用户要求

    现在有些客户要求他们想要回去一个月并更新手头的数量 . 如何支持允许输入过时库存数量的功能?

    • 现已更正的数据库处理它就好了 .

    • 注意,由于数据库已经更正,因此只有一个QoH . 如果没有得到纠正,我们必须停下来问:

    他们希望更新哪个QoH,正在运行的总数,还是真实的,或者两者兼而有之?它有什么用途?

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

    • 添加一个函数以允许特权用户(例如,为了允许这个而被授予"supervisor"权限的人)到过去的有效日期,将其约束为(例如)30天或其他什么 .

    • 当事务执行时,它将以通常的方式调整 Inventory.QoH .

    故事结局 .

    (如果不是,则表明存在相关性尚未传达的细节 . 请这样做 . )

    创可贴修复

    如果您不理解(a)错误的性质,以及(b)更正的准确性,即 . 你很乐意保留它,然后......

    如果这是被允许的话,我曾在3月1日和4月10日之间的INVENTORY_ADJUSTMENT表所做的每个条目都需要被更新,因为INVENTORY_ADJUSTMENT的每一行有QOH字段,现在是不同步的 .

    是 .

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

    编码吧 .

相关问题