Все зависит от того, когда и в каком окне вы решите заблокировать основную таблицу для обновления.
A. Если вы должны быть на 100% уверены, что предмет будет пытаться купить только тогда, когда он обязательно доступен. Вам нужно будет заблокировать предмет для конкретного пользователя, как только вы перечислите его ему (что означает, что вы временно уменьшите запас инвентаря)
B. Если у вас все в порядке с тем, чтобы показать сообщение «извините, у нас просто закончился запас». Вы должны заблокировать товар непосредственно перед выставлением счета (что ж, вы можете сделать это после завершения транзакции, но за счет очень разъяренного клиента)
Я бы выбрал подход А для блокировки и, возможно, пометил бы предупреждение "скоро будет распродан" для товаров с очень низким запасом. (если это очень частая ситуация, вы также можете подсчитать количество одновременных пользователей, попавших в предмет и дать более точное предупреждение)
С точки зрения бизнеса, вы бы не хотели, чтобы на складе было так мало (меньше, чем количество одновременных покупателей). Это, конечно, неизбежно в «рождественские» времена, когда нет ничего в наличии:) *