Автоматически удалять строку родительского объекта, когда все дочерние элементы отсутствуют - PullRequest
0 голосов
/ 15 октября 2008

В базе данных PostgreSQL 8.3 у меня есть таблица «бронирования», ссылающаяся на таблицу «booking_transactions» по идентификатору. Так что каждое бронирование принадлежит одной транзакции. Можно удалить заказы из базы данных.

Как я могу убедиться, что строка "booking_transactions" автоматически удаляется, когда все "бронирования", ссылающиеся на нее, исчезли?

Я подозреваю, что триггер ON DELETE "бронирования" не будет работать, так как он должен запрашивать другие строки таблицы "бронирования".

Ответы [ 2 ]

0 голосов
/ 15 октября 2008

Следующая функция триггера plpgsql выполняет работу

BEGIN
DELETE FROM
    booking_transactions bt
WHERE
    bt.id = OLD.transaction_id AND
    NOT EXISTS (SELECT 1 FROM bookings b WHERE b.transaction_id = bt.id);

RETURN OLD;
END;

Должен быть выполнен после бронирования 'УДАЛИТЬ

0 голосов
/ 15 октября 2008

Триггер на «бронированиях» должен работать, нет проблем с запросом самой таблицы в функции триггера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...