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

Не правильное удаление с FOREIGN KEY

Добавлено: 06 фев 2006, 12:16
Sergepn
Доброго времени суток.
Помогите пожалуйста разобраться с такой проблеммой:
Есть таблица Table1(ID, flag)
id-ключевое поле, flag-грубо говоря булевое(имеет значение либо 'T' либо 'F')
Есть вторая таблица Table2(id, grid, name), где
id-первичный,
grid- связано с Table1(ID) с помощью FOREIGN KEY.

В триггере Table2 перед удалением смотрится значение поля flag таблицы Table1 и если это поле 'T', то удаление разрешается, иначе- ексепшн.
Так вот, если удалять строки в таблице Table2, то все нормально - ексепшн появляется, а вот если удалить строку в таблице Table1, то эта операция удалит строки из подчиненной таблицы(как положенно), и удалится сама, хотя в принципе удалится не должна.
Заранее благодарен за ответ.

Re: Не правильное удаление с FOREIGN KEY

Добавлено: 06 фев 2006, 13:08
smu
Sergepn писал(а):Доброго времени суток.
..вот если удалить строку в таблице Table1, то эта операция удалит строки из подчиненной таблицы(как положенно), и удалится сама..
А как должно быть?[/b]

Добавлено: 06 фев 2006, 13:21
Sergepn
Ну я так думаю, когда удаляются записи из главной таблицы, то должны удаляться сначала все записи из подчиненной(и при этом, в моем случае, должен возникать ексепшн), а он не возникает.

Добавлено: 06 фев 2006, 13:40
Merlin
Это если ты сам удаляешь дочерние записи. А если пользуешься FK on delete cascade - всё наоборот. Сначала удаляется запись в мастере. Чтобы за время, когда сервер разбирается с уже существующими деталями никто не повставлял новых и не пришлось бы ходить бесконечными кругами.

Добавлено: 06 фев 2006, 13:57
Sergepn
Спасибо за ответ. Короче обануть IB у меня не получится. Так не хотелось обрабатывать одно и то же условие в 2-х местах, но видимо придется. Еще раз спасибо.