Ошибка при определении FK

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

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

Ответить
Евгений
Сообщения: 3
Зарегистрирован: 04 ноя 2004, 09:21

Ошибка при определении FK

Сообщение Евгений » 04 ноя 2004, 09:29

Недавно начал использовать IB и тут же наткнулся на грабли:
при выполнении таких запросов :
create table Persons (
Pers_ID smallint not null primary key,
);
create table Institutions (
Inst_ID smallint not null primary key,
);
create table SpecList (
SL_ID smallint not null primary key,
foreign key (Spec_ID) references Specialities (Spec_ID)
on update cascade on delete cascade,
foreign key (Inst_ID) references Institutions(Inst_ID)
on update cascade on delete cascade
);

выскакивает ошибка
Unsuccessful metadata update
Unknown columns in index RDB$FOREIGN17

она выдается как в 5 так и в 6 версии
Возможно, я что-то делаю не так?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 04 ноя 2004, 09:53

создание FK пиши через alter table add constraint xxx foreign ...
первичные ключи пиши как

create table x(
f1 ....,
constraint pk_x primary key (f...))

а то потом тебе же нехорошо будет. неименованные constraint, индексы по constraint...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 04 ноя 2004, 09:54

да, и еще - в справочниках обычно записи не удаляют, да и их идентификаторы (поля первичных ключей) не меняют. это моветон.

Евгений
Сообщения: 3
Зарегистрирован: 04 ноя 2004, 09:21

Ошибка при определении FK

Сообщение Евгений » 04 ноя 2004, 10:15

Изменил запросы, не помогло. Выдается та же ошибка - Unsuccessful metadata update
Unknown columns in index RDB$FOREIGN45
Вроде создание FK стандартная операция, почему она не работает?

Запросы теперь такие (ошибка выскакивает на последний):
create table Specialities (
Spec_ID smallint not null,
...
constraint SpecId primary key (Spec_ID)
);
create table Institutions (
Inst_ID smallint not null,
...
constraint InstId primary key (Inst_ID)
);
create table SpecList (
SL_ID smallint not null,
constraint SLID primary key (SL_ID)
);
alter table SpecList
add constraint SL_SpecID foreign key (Spec_ID)
references Specialities (Spec_ID)
on update cascade on delete cascade,
add constraint SL_InstID foreign key (Inst_ID)
references Institutions(Inst_ID)
on update cascade on delete cascade;

vlad_gri

Сообщение vlad_gri » 04 ноя 2004, 10:40

create table SpecList (
SL_ID smallint not null,
Spec_ID smallint not null,
Inst_ID smallint not null,
constraint SLID primary key (SL_ID)
);

Евгений
Сообщения: 3
Зарегистрирован: 04 ноя 2004, 09:21

Сообщение Евгений » 04 ноя 2004, 10:45

работает, спасибо!

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 04 ноя 2004, 11:32

зачем у тебя почти все столбцы уникальные? типа, боишься например что у двух людей одинаковый email будет? :-)

Ответить