Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблемы с foreign key / 12 сообщений из 12, страница 1 из 1
01.12.2003, 14:29
    #32339462
anastassia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с foreign key
Всем привет!
Такая беда: не дропаются таблицы, которые содержат foreign key. То есть они нормально создаются, но когда я не переконнекчиваясь к базе хочу таблицу убрать, IBConsole мне сообщает "Unsuccessful metadata update: object "имя таблицы" is in use".Чем он используется, если всего одна коннекция к базе? Коммит после создания не помогает. Как таблицу в таком случае удалить?
Немного другая ситация. Переконнектилась и хочу удалить таблицы по списку - через ibconsole загружаю скрипт и запускаю его. Первая в списке таблица(содержит foreign key'и) удаляется, а следующая за ней, никак с первой не связанная, но тоже с foreign key`ями не удаляется(и последующие соответственно тоже). Выдаётся ошибка как в первом случае.
Как посоветуете решить проблему?
...
Рейтинг: 0 / 0
01.12.2003, 14:34
    #32339473
Малиновский Владимир
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с foreign key
Как создавались внешние ключи. Скрипт, пожалуйста.
...
Рейтинг: 0 / 0
01.12.2003, 14:51
    #32339510
Void!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с foreign key
Попробуй сначала удалить foreign key если не удалятся то удали триггеры определяющие поведение отношения целостности для этого ключа
...
Рейтинг: 0 / 0
01.12.2003, 14:52
    #32339513
anastassia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с foreign key
Пример с 5-ю таблицами:
CREATE TABLE Person (
person_id integer NOT NULL PRIMARY KEY,
FIO varchar(50) NOT NULL,
age smallint NOT NULL,
birthday date NOT NULL,
sex char(1) NOT NULL,
address varchar(40) NOT NULL,
phone char(20) NOT NULL,
desease_type varchar(1) NOT NULL
);
CREATE TABLE Operation (
operation_id smallint NOT NULL PRIMARY KEY,
operation_name varchar(80) NOT NULL
);
CREATE TABLE PersonOperation(
operation_id smallint NOT NULL,
person_id integer NOT NULL,
operation_type char(1),
FOREIGN KEY (operation_id) REFERENCES Operation (operation_id),
FOREIGN KEY (person_id) REFERENCES Person (person_id) ON DELETE CASCADE
);
CREATE TABLE Difficulties (
difficulty_id smallint NOT NULL PRIMARY KEY,
description varchar(50) NOT NULL
);
CREATE TABLE PersonDifficulties (
person_id integer NOT NULL,
difficult_id smallint NOT NULL,
FOREIGN KEY (person_id) REFERENCES Person (person_id) ON DELETE CASCADE,
FOREIGN KEY (difficult_id) REFERENCES Difficulties (difficulty_id)
);
Вот всё это успешно создалось и мне потребовалось тут же удалить таблицу PersonDifficulties. Вот тогда и ругается. Если мне надо все удалить порядок в скрипте такой:
PersonOperation,PersonDifficulties,Difficulties,Operation.Person. При новой коннекции PersonOperation удалит, а на следущую отругается
...
Рейтинг: 0 / 0
01.12.2003, 15:01
    #32339529
anastassia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с foreign key
триггеры в я данном случае не использую. А как удалить констрэйнты? Просто раньше работала с ораклом и в нём с такими проблемами не встречалась.
...
Рейтинг: 0 / 0
01.12.2003, 16:08
    #32339640
Void!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с foreign key
я использую IBExpert для разработки а как составить скрипт для удаления этих триггеров не знаю
...
Рейтинг: 0 / 0
01.12.2003, 16:16
    #32339660
Void!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с foreign key
у тебя в таблице PersonOperation(
.....
FOREIGN KEY (person_id) REFERENCES Person (person_id) ON DELETE CASCADE
);

здесь ON DELETE CASCADE обеспечивается триггером имя к-го нужно определить. Аналогично и в PersonDifficulties
...
Рейтинг: 0 / 0
01.12.2003, 16:42
    #32339712
anastassia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с foreign key
Разве триггер который отрабатывает "ON DELETE CASCADE" не создается автоматически? Иначе зачем нужна эта фраза, если можно прекрасно самому написать и навеситьтриггер. Но даже если мне и надо опеределить его имя, на удаление это никак не повлияет, как мне кажется. У меня есть таблицы с FОREIGN KEY без "ON DELETE CASCADE", они не хотят удаляться точно таким же образом. Я именно эти таблицы в качестве примера привела только потому, что в них полей меньше :)
...
Рейтинг: 0 / 0
01.12.2003, 19:14
    #32339925
Andrey_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с foreign key
Да это все IBConsole виновата. Незнаю как и почему но если она вдруг тебе говорит object in use переконектится к базе помогает. А вот IBExpert вроде такого не делает.
...
Рейтинг: 0 / 0
02.12.2003, 19:06
    #32341235
july_p
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с foreign key
У меня то же самое.
Пробовала и в IBConsole, и в SQLExplorer удалить из таблицы все fk, первый удаляется, а дальше index is in use. Я-то думала, что так и должно быть!
...
Рейтинг: 0 / 0
03.12.2003, 16:33
    #32342302
Void!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с foreign key
Все таки тебе нужно сначала удалить обьекты отношений целлостности таблиц. А чтобы что-нибудь удалить нужно знать что (вот для чего нужно определить имя). поэтому лучше установи IBExpert и посмотри зависимости
...
Рейтинг: 0 / 0
03.12.2003, 17:41
    #32342410
anastassia
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с foreign key
Спасибо. С IBExpert проблемы не стало.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Проблемы с foreign key / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]