Страница 1 из 1

Управление последовательностью срабатывания форейнов

Добавлено: 20 ноя 2010, 01:47
shmel
Речь о FireBird 2.1.

Структура базы такова, что имеет значение какой форейн сработает первый при удалении записи из таблицы.
Если сначала первый сработает, то ошибки не будет.
Если сначала второй сработает, то будет ошибка.

Смотрите приложенную схему БД.
Она упрощена для лучшего понимания проблемы.
Стрелки указывают на родительские объекты (один ко многим).
Цифры в скобках - для удобства объяснений: первый форейн, второй, третий.
Имеется три таблицы связанные между собой форейнами.
Два каскадных форейна (дочерние записи удаляются), один запрещающий удаление.

http://ipicture.ru/uploads/20101120/bT3e2qRV.png

Хороший сценарий.
1. Удаляем запись из Т1.
2. Срабатывает первый форейн и записи удаляются из таблицы Т3.
3. Срабатывает второй форейн и записи должны удалиться из Т2. Но нужно проверить, нет ли записей в Т3. Проверяем - их нет. Они удалены чуть раньше.

Плохой сценарий.
1. Удаляем запись из Т1.
2. Срабатывает второй форейн. Должны удалиться записи из Т2, если нет для них записей в Т3. Но записи в Т3 есть - получаем ошибку.
3.

Как быть? На триггеры переходить не хочется.

Re: Управление последовательностью срабатывания форейнов

Добавлено: 22 ноя 2010, 23:26
kdv
Продолжение и окончание - тут:
http://www.sql.ru/forum/actualthread.aspx?tid=807660