ORA-02270: no matching unique or primary key for this column-list
Прошу подсказать почему у меня не получается создать/модифицировать таблицу следующим образом.
Имеем таблицу teacher
Код:
SQL> create table teacher(family varchar2(50 char) not null, name varchar2(50 char) not null, thidname varchar2(50 char), elementary_school varchar2(3 char), home_addres varchar2(60 char), telephone varchar(20 char), primary key(family, name);
Таблица с такой структурой создается нормально, но далее
Код:
SQL> create table classes (class_munber integer not null, class_literal varchar2(3 char) not null, name_homeroom varchar2(50 char) references teacher(name), family_homeroom varchar2(50 char) references teacher(family), primary key(class_number, class_literal));
при попытке создать такую таблицу я получаю ошибку "ORA-02270: no matching unique or primary key for this column-list". Доки смотрел, ничего не сказали))
Из серии танцев с бубном пробовал еще такое
Код:
SQL> create table classes (class_munber integer not null, class_literal varchar2(3 char) not null, name_homeroom varchar2(50 char) not null references teacher(name), family_homeroom varchar2(50 char) not null references teacher(family), primary key(name_homeroom, family_homeroom, class_number, class_literal));
но это ничего не дало, выскакивает та же ошибка.
Объясните пожалуйста из-за чего собственно она появляется? Что не так в моих таблицах?
P.S.: работаю с Oracle XE 10g через sql*Plus
Код:
SQL> create table classes (class_munber integer, class_literal varchar2(3 char),
name_homeroom varchar2(50 char) not null references teacher(name), family_homero
om varchar2(50 char) not null references teacher(family), primary key(name_homer
oom, family_homeroom));
name_homeroom varchar2(50 char) not null references teacher(name), family_homero
om varchar2(50 char) not null references teacher(family), primary key(name_homer
oom, family_homeroom));
Дока здесь
Может так:
Может так:
Код:
create table classes (
class_number integer,
class_literal varchar2(3),
name_homeroom varchar2(50) not null references teacher(name),
family_homeroom varchar2(50) not null references teacher(family),
constraint classes_xpk primary key (name_homeroom, family_homeroom)
);
class_number integer,
class_literal varchar2(3),
name_homeroom varchar2(50) not null references teacher(name),
family_homeroom varchar2(50) not null references teacher(family),
constraint classes_xpk primary key (name_homeroom, family_homeroom)
);
Внешний ключ должен ссылаться либо на primary либо на unique key мастер-таблицы. В вашем случае primary key таблицы teacher составной (family, name), поэтому и внешний ключ в таблице classes должен быть составным и содержать 2 поля, ссылающиеся на соответствующие поля таблицы teacher.
grgdvo, Ora-cool, действительно. Спасибо