|
|
|
Проблемы с foreign key
|
|||
|---|---|---|---|
|
#18+
Всем привет! Такая беда: не дропаются таблицы, которые содержат foreign key. То есть они нормально создаются, но когда я не переконнекчиваясь к базе хочу таблицу убрать, IBConsole мне сообщает "Unsuccessful metadata update: object "имя таблицы" is in use".Чем он используется, если всего одна коннекция к базе? Коммит после создания не помогает. Как таблицу в таком случае удалить? Немного другая ситация. Переконнектилась и хочу удалить таблицы по списку - через ibconsole загружаю скрипт и запускаю его. Первая в списке таблица(содержит foreign key'и) удаляется, а следующая за ней, никак с первой не связанная, но тоже с foreign key`ями не удаляется(и последующие соответственно тоже). Выдаётся ошибка как в первом случае. Как посоветуете решить проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2003, 14:29 |
|
||
|
Проблемы с foreign key
|
|||
|---|---|---|---|
|
#18+
Как создавались внешние ключи. Скрипт, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2003, 14:34 |
|
||
|
Проблемы с foreign key
|
|||
|---|---|---|---|
|
#18+
Попробуй сначала удалить foreign key если не удалятся то удали триггеры определяющие поведение отношения целостности для этого ключа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2003, 14:51 |
|
||
|
Проблемы с foreign key
|
|||
|---|---|---|---|
|
#18+
Пример с 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 удалит, а на следущую отругается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2003, 14:52 |
|
||
|
Проблемы с foreign key
|
|||
|---|---|---|---|
|
#18+
триггеры в я данном случае не использую. А как удалить констрэйнты? Просто раньше работала с ораклом и в нём с такими проблемами не встречалась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2003, 15:01 |
|
||
|
Проблемы с foreign key
|
|||
|---|---|---|---|
|
#18+
я использую IBExpert для разработки а как составить скрипт для удаления этих триггеров не знаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2003, 16:08 |
|
||
|
Проблемы с foreign key
|
|||
|---|---|---|---|
|
#18+
у тебя в таблице PersonOperation( ..... FOREIGN KEY (person_id) REFERENCES Person (person_id) ON DELETE CASCADE ); здесь ON DELETE CASCADE обеспечивается триггером имя к-го нужно определить. Аналогично и в PersonDifficulties ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2003, 16:16 |
|
||
|
Проблемы с foreign key
|
|||
|---|---|---|---|
|
#18+
Разве триггер который отрабатывает "ON DELETE CASCADE" не создается автоматически? Иначе зачем нужна эта фраза, если можно прекрасно самому написать и навеситьтриггер. Но даже если мне и надо опеределить его имя, на удаление это никак не повлияет, как мне кажется. У меня есть таблицы с FОREIGN KEY без "ON DELETE CASCADE", они не хотят удаляться точно таким же образом. Я именно эти таблицы в качестве примера привела только потому, что в них полей меньше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2003, 16:42 |
|
||
|
Проблемы с foreign key
|
|||
|---|---|---|---|
|
#18+
Да это все IBConsole виновата. Незнаю как и почему но если она вдруг тебе говорит object in use переконектится к базе помогает. А вот IBExpert вроде такого не делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2003, 19:14 |
|
||
|
Проблемы с foreign key
|
|||
|---|---|---|---|
|
#18+
У меня то же самое. Пробовала и в IBConsole, и в SQLExplorer удалить из таблицы все fk, первый удаляется, а дальше index is in use. Я-то думала, что так и должно быть! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2003, 19:06 |
|
||
|
Проблемы с foreign key
|
|||
|---|---|---|---|
|
#18+
Все таки тебе нужно сначала удалить обьекты отношений целлостности таблиц. А чтобы что-нибудь удалить нужно знать что (вот для чего нужно определить имя). поэтому лучше установи IBExpert и посмотри зависимости ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2003, 16:33 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32339462&tid=1579569]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
247ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 568ms |

| 0 / 0 |
