Чистое решение, которое хорошо работает для нас, - это использовать систему типов «внутреннего заказа». Таблица продуктов будет содержать информацию о продукте, а также запас на складе. Когда пользователь резервирует продукт, мы рассматриваем его как внутренний заказ, поэтому в таблице заказов у вас будет элемент, который пользователь зарезервировал, а также дата и время, когда он был зарезервирован. Затем вы можете уменьшить количество запаса в вашей таблице продуктов на основе количества единиц, которые пользователь зарезервировал.
Затем вы можете в ночное время, например, проверять внутренние заказы, которые не были преобразованы в счета-фактуры, и впоследствии удалять их из базы данных, увеличивая количество запаса в вашей таблице продуктов на основе количества единиц, которые были зарезервированы, но не выставлены счета ,
Если использование завершается покупкой, товар просто конвертируется в счет-фактуру. В некоторых случаях мы используем одну и ту же таблицу для счетов-фактур и заказов с простым полем, которое указывает, является ли запись счетом-фактурой или просто внутренним заказом.