问题
首先,您需要了解问题,它是什么,以及您已经创建了它。之后,我们将有不同的背景,并可以讨论可能的解决方案。
Inventory
是硬性的、永久的事实表。这个想法是,在任何时候,如果建筑物冒烟,表格最终会确定公司库存的位置。
该InventoryAdjustment
表只是针对公司库存的交易,针对该Inventory
表。它可能被命名为Transaction
.
该InventoryAdjustment.QoH
列是重复的列。QoH
已经存在Inventory
于. 创建重复列时,您有:
违反规范化规则(因此您有一个众所周知的经典错误,我们被要求避免,并且会产生后果)。您的表不再规范化,您的数据库不是数据库。
引入了更新异常。这意味着您必须在多个位置更新数据(即事实的单一版本的值),否则这两个(或更多)项目会“不同步”。这个想法是,首先不要创建重复项。
如果您实施它是为了提供一个运行总计(InventoryAjustment.QoH,
连续行),那么您就是在自欺欺人。运行总计(Inventory.QoH
加上当前行的所有调整)很容易在 SQL 代码中提供。要求它,如果你需要它。
现在你已经习惯了这种错误的状态,你不认为它是一个错误,它到目前为止“工作得很好”。所以你可能很难接受这是一个错误。我会把它留给你去克服。
解决方案
删除InventoryAdjustment.QoH
列。
Inventory.QoH
每当InventoryAdjustment
插入行时,保留对列的重新计算和更新。
现在该Inventory.QoH
列是true,并且一直是 true 。它反映了现在仓库中的确切 QoH。
不需要“同步”,因为文件中没有事实的两个版本或一个事实的两个副本。
故事结局。
新用户需求
现在一些客户有一个要求,他们想回去一个月并更新手头的数量。我如何支持允许输入回溯库存数量的功能?
故事结局。
(如果不是,则表明存在尚未传达的相关细节。请这样做。)
创可贴修复
如果您不了解 (a) 错误的性质,以及 (b) 更正的真实性,即。您很乐意保留它,然后...
如果允许这样做,那么我在 3 月 1 日至 4 月 10 日期间在 INVENTORY_ADJUSTMENT 表中创建的每个条目也需要更新,因为 INVENTORY_ADJUSTMENT 的每一行都有 QOH 字段,该字段现在将不同步。
是的。
这是更新异常的结果。无论如何,调整项的所有重复InventoryAdjustment.QoH
值现在都被视为错误。记录它们没有,也没有任何价值。但你确实记录了它们。现在他们需要更新。
编码它。