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

Запросы, планы, оптимизация запросов, ...

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

Ответить
Sergepn
Сообщения: 4
Зарегистрирован: 08 июн 2005, 16:37

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

Сообщение Sergepn » 06 фев 2006, 12:16

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

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

smu
Сообщения: 39
Зарегистрирован: 29 окт 2005, 10:12

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

Сообщение smu » 06 фев 2006, 13:08

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

Sergepn
Сообщения: 4
Зарегистрирован: 08 июн 2005, 16:37

Сообщение Sergepn » 06 фев 2006, 13:21

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

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 06 фев 2006, 13:40

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

Sergepn
Сообщения: 4
Зарегистрирован: 08 июн 2005, 16:37

Сообщение Sergepn » 06 фев 2006, 13:57

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

Ответить