我的数据库有2个表 1.具有 ID,名称,QOH 属性的库存(即库存数量)
每次出售或购买库存物品时,我都会在INVENTORY_ADJUSTMENT中输入一个条目。此时我还会计算库存并更新INVENTORY和INVENTORY_ADJUSTMENT中的QOH。
到目前为止,这一切都很好。但现在一些客户有一个要求,他们想要回去一个月并更新手头的数量。所以对于ex:4月10日,用户可以返回并更改3月1日的QOH。如果允许这样做,那么我在3月1日到4月10日之间在INVENTORY_ADJUSTMENT表中做的每个条目也需要更新,因为INVENTORY_ADJUSTMENT的每一行都有QOH字段,现在它将不同步。
如何支持允许输入过时库存数量的功能?任何帮助将不胜感激。
答案 0 :(得分:2)
首先,您需要了解问题,问题是什么,以及您是否已创建问题。之后我们将有不同的背景,并可以讨论可能的解决方案。
Inventory
是一个快速,永久的事实表。这个想法是,在任何时候,如果建筑物冒烟,表格最终确定了公司库存的位置。
InventoryAdjustment
表只是针对Inventory
表的公司库存的交易。它本可以命名为Transaction
。
InventoryAdjustment.QoH
列是重复列。 QoH
中已存在Inventory
。创建重复列时,您有:
破坏了规范化规则(因此您有一个众所周知的经典错误,我们被命令避免,并且会产生后果)。您的表格不再标准化,您的数据库不是数据库。
引入了更新异常。这意味着你必须在多个地方更新数据(真值的单一版本的值),否则这两个(或更多)项目会失去同步"。我们的想法是,首先不要创建副本。
如果你已经实现了它以便提供一个总计(连续行中为InventoryAjustment.QoH,
),你一直在欺骗自己。在SQL代码中可以轻松提供运行总计(Inventory.QoH
以及直到当前行的所有调整)。如果需要,请提出要求。
现在你已经习惯了这种错误的事态,你不会把它视为一个错误,它已经"工作得很好"到现在。所以你可能很难接受这是一个错误。我会离开那让你克服。
关键词是"到目前为止#34;。传统上,只有在暴露错误或用户想要更改某些内容时,才会出现此类错误。首先,他们需要被暴露并理解它们是什么。
事件刚刚发生,上面已经触发了。
删除InventoryAdjustment.QoH
列。
每当插入Inventory.QoH
行时,都会保留InventoryAdjustment
列的重新计算和更新。
现在Inventory.QoH
列为真,并且始终为真。它现在反映了仓库中的确切QoH。
否"同步"需要,因为没有两个版本的真相,或一个真相的两个副本,存档。
故事结束。
现在有些客户要求他们想要回去一个月并更新手头的数量。如何支持允许输入过时库存数量的功能?
现已更正的数据库处理它就好了。
请注意,由于数据库已更正,因此只有一个QoH。如果没有得到纠正,我们将不得不停下来问:
他们希望更新哪个QoH,正在运行的总数,还是真实的,或者两者兼而有之? 它有什么用途?
该应用需要稍微调整一下。我假设当前函数将InventoryAdjustment.Date
设置为插入前的当前日期。
set
InventoryAdjustment.Date
到有效日期过去,将其限制在(例如)30天或其他任何事情。当交易执行时,它会以通常的方式调整Inventory.QoH
。
故事结束。
(如果不是,则表明有相关的细节尚未传达。请这样做。)
如果您不理解(a)错误的性质,以及(b)更正的准确性,即。你很乐意保留它,然后......
如果允许这样做,那么我在3月1日到4月10日之间在INVENTORY_ADJUSTMENT表中创建的每个条目都需要更新,因为INVENTORY_ADJUSTMENT的每一行都有QOH字段,现在它将是不同步。
是。
这是更新异常的结果。无论如何,调整后的项目的所有重复InventoryAdjustment.QoH
值现在都被认为是假的。记录它们没有,也没有任何价值。但你确实记录了它们。现在他们需要更新。
编码。