Скорее всего, я бы пошёл по триггерному маршруту и обновил бы количество, когда транзакции помещаются в базу данных. Это позволяет легко увидеть текущее количество без необходимости в подзапросах и вычислениях.
Если это сделано в триггере, то вы можете гарантировать, что независимо от того, откуда происходит транзакция, количества в ваших таблицах запасов будут всегда обновляться (независимо от того, есть ли транзакции, добавленные через жесткие INSERT или через приложение).
Если есть проблемы с журналированием, то включите регистрацию в триггер для отслеживания количества до / после в отдельной таблице журналирования.
Триггер может выглядеть так (не проверено):
CREATE TRIGGER [dbo].[OrderAdded]
ON [dbo].[Orders]
AFTER INSERT
AS
BEGIN
DELCARE @ProductID int; DECLARE @Qty int;
SET @ProductID = (SELECT ProductID FROM inserted);
SET @Qty = (SELECT Qty FROM inserted);
UPDATE StockTable
SET Stock = Stock - @Qty
WHERE ID = @ProductID
END
Я не вижу проблем с производительностью, о которых стоит беспокоиться, если вы правильно индексировали StockTable
для поля ID и Stock (я, конечно, все это придумываю, учитывая, что Вы не предоставили никакой информации БД).