У меня есть таблица A с именем Order
. Она имеет PK id , несколько столбцов, столбец bool с именем active
и столбец tableid .Два ордера не могут быть активными одновременно для tableid , который обеспечивается уникальным противопоказанием из двух столбцов (&& active = true), которое работает как индекс, и поиск активных ордеров выполняется довольно быстро.
проблема в том, что есть еще одна таблица orderitems .Я хочу, чтобы активным было значение true, если все элементы заказа для идентификатора заказа не помечены как оплаченные = true ..
С помощью транзакций сериализации этого можно достичь, я думаю, в коде платежа, задав запрос на обновление, если все товары оплачены.Я думаю, что это не будет работать всегда. Потому что, если они запускаются одновременно, они оба могут видеть, что есть неоплаченные элементы (из-за старого снимка), но при фиксации они будут платить все элементы, но не обновлять активный столбец. (Другой).
При добавлении новых элементов и платежной транзакции выполняется попытка установить активное = ложное, не будет проблемы с последовательными транзакциями, потому что одна из них потерпит неудачу.
Я думаю, что триггеры - это решение, но я не знаю, что именно делать. Спасибо за чтение.