2008-10-15 3 views
0

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

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

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

ответ

0

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

+0

Да, вы правы. Я, должно быть, смутил его ограничениями CHECK. – 2008-10-15 11:28:38

0

Следующая 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; 

Он должен быть выполнен после того, как заказы УДАЛИТЬ

Смежные вопросы