Я думал о том, как лучше всего рассчитать количество единиц в наличии для данного предмета инвентаря. Таблицы будут очень большими, со многими транзакциями, поэтому может оказаться нереальным рассчитать наличные по требованию, сложив все поступления и вычтя все отгрузки и продажи. Одна идея, с которой я столкнулся, заключается в том, чтобы периодически создавать контрольные точки, то есть записи о товаре и количестве в наличии. Любые последующие расчеты наличного количества товара начинаются с контрольной точки, что сводит на нет необходимость суммирования по всем транзакциям.
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
Расчет наличными для инв позиции 1 на 8/30 будет таким:
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
Расчет наличными для инв позиции 1 8/14 будет таким:
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
Мой вопрос: какие проблемы создает этот подход? Существуют ли более эффективные подходы для работы с огромными наборами транзакций, кроме хранения наличного количества в таблице? Сохраняется ли имеющееся количество в таблице почти так же, как метод контрольной точки, возможно, даже менее подвержено ошибкам при обновлении с помощью триггеров или каких-то сигналов?