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

Модераторы: kdv, CyberMax

Ответить
shmel
Сообщения: 6
Зарегистрирован: 25 окт 2004, 19:07

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

Сообщение shmel » 20 ноя 2010, 01:47

Речь о FireBird 2.1.

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

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

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

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

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

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


Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость