Если у меня есть схема Postgresql дБ для таблицы шин, подобной этой (у пользователя много шин):
user_id integer
description text
size integer
color text
created_at timestamp
, и я хочу применить ограничение, которое говорит, что «пользователь может иметь только 4 шины ".
Наивным способом реализации этого было бы сделать:
SELECT COUNT(*) FROM tires WHERE user_id='123'
, сравнить результат с 4 и вставить, если он ниже 4. Он подвержен гоночным условиям и поэтому наивен подход.
Я не хочу добавлять столбец подсчета. Как я могу сделать это (или я могу сделать это), используя ограничение исключения? Если это невозможно с ограничениями исключения, каков канонический путь?