特定の在庫品目の手持数量を計算する最良の方法について考えていました。テーブルは非常に大きくなり、多くのトランザクションが発生するため、すべての入荷を追加してすべての出荷と販売を差し引いて、オンデマンドで手持在庫を計算するのは現実的ではない場合があります。私が思いついたアイデアの 1 つは、定期的にチェックポイント、つまり品目と手持数量の記録を作成することです。手持数量の後続の計算はチェックポイントから開始されるため、すべてのトランザクションを合計する必要はありません。
inventory item table
id | location | item
1 1 234
2 1 567
receiving table
inv item | stamp | quantity
1 2010-08-10 200
1 2010-08-30 10
2 2010-08-30 20
shipment table
inv item | stamp | quantity
1 2010-08-10 40
1 2010-08-30 5
2 2010-08-30 2
sale table
inv item | stamp | quantity
1 2010-08-10 10
1 2010-08-15 15
1 2010-08-30 1
1 2010-08-30 1
2 2010-08-30 2
checkpoint table
inv item | stamp | quantity
1 2010-08-11 150
1 2010-08-28 135
2 2010-08-15 15
8/30の請求書1の手持ちを計算するとこんな感じ
get most recent checkpoint(inv item 1, 8/30) returns 135 units on 8/28
on-hand = 135 + receivings - (shipments + sales)
only rcv/shp/sales that occur between the most recent checkpoint 8/30
8/14の請求書1の手持計算はこんな感じ
get most recent checkpoint(inv item 1, 8/14) returns 150 units on 8/11
on-hand = 150 + receivings - (shipments + sales)
only rcv/shp/sales that occur between the most recent checkpoint and 8/14
私の質問は、このアプローチはどのような問題を引き起こすのでしょうか? 手持数量をテーブルに格納する以外に、膨大なトランザクション セットを処理するためのより良い方法はありますか? 手持数量をテーブルに格納する方法は、チェックポイント方式とほぼ同じですか? トリガーまたは何らかのシグナルを介して更新された場合、エラーが発生する可能性はさらに低くなりますか?