「ベスト」プラクティスが何であるかはわかりませんが、以前にこの種の在庫システムを作成したことがあります。あなたの質問にはほとんど答えがあります-バッチ番号で購入を追跡する必要があります.
したがって、在庫マスターは次のようになります。
Primary_Inventory_Key
Description
LIFO_FIFO_FLAG // if this is set at the inventory item level
...
そして、Inventory Batch テーブルは次のようになります。
Primary_Inventory_Key
Batch # // autoincrement
// maybe PO # or something rather than these fields, depends on rest of schema
Purchase Date //
Purchase Price //
Purchase Qty // quantity originally purchased
VendorID
InventoryLevel // quantity remaining from this batch
...
PRIMARYKEY(Primary_Inventory_Key,Batch#)
次に、販売に行くときは、次のようにします。
SELECT MAX(Batch#) WHERE InventoryKey = 'Mykey' AND InventoryLevel > 0
LIFO および:
SELECT MIN(Batch#) WHERE InventoryKey = 'Mykey' AND InventoryLevel > 0
FIFO用。
リストをプルアップして、ユーザーがこのスキーマでバッチを選択できるようにすることもできます。
トランザクションがコミットされたら、在庫レベルを減らすことを忘れないでください。