Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
Sergepn
- Сообщения: 4
- Зарегистрирован: 08 июн 2005, 16:37
Сообщение
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
Сообщение
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-х местах, но видимо придется. Еще раз спасибо.