2016-11-21 2 views
1

Я довольно новичок в SQL, и у меня есть проблема. Я хочу сделать рекурсивные отношения (таблица, которая относится к самому себе), но я получаю сообщение об ошибке при попытке выполнить мой код. Он отлично работает без внешнего ключа Coordinator_Office_ID.Рекурсивные отношения SQL-ошибка

Ошибка:

Количество столбцов в списке внешнего ключа ссылающегося не равно числа столбцов в списке ссылочного.

Create table Logistican (
    Office_ID Number(10) Constraint nb_office Not NULL, 
    Worker_ID Number(15) Constraint lg_worker not null, 
    Name_logistican Varchar(20), 
    Room Varchar(10) constraint log_room UNIQUE, 
    Coordinator_Office_ID Integer, 
    Primary key (Office_ID, Worker_ID), 
    Constraint work_id Foreign key (Worker_ID) References worker(worker_ID) on  delete cascade, 
    Constraint lg_cord_id Foreign key (Coordinator_Office_ID) References  Logistican(Office_ID) 
); 
+0

Почему вы используете различные типы для 'Coordinator_Office_ID' и 'Office_ID'? –

+0

Я видел, что наш профессор написал это так, но я не уверен, что это правильно – specbk

ответ

2

Добавьте ограничение с alter table:

Create table Logistican (
    Office_ID Number(10) Constraint nb_office Not NULL, 
    Worker_ID Number(15) Constraint lg_worker not null, 
    Name_logistican Varchar(20), 
    Room Varchar(10) constraint log_room UNIQUE, 
    Coordinator_Office_ID Integer, 
    Primary key (Office_ID, Worker_ID), 
    Constraint work_id Foreign key (Worker_ID) References worker(worker_ID) on delete cascade 
); 

alter table Logistican 
    add Constraint lg_cord_id 
     Foreign key (Coordinator_Office_ID, Worker_Id) References  Logistican(Office_ID, Worker_Id); 

Отношения необходимо все элементы первичного ключа, чтобы быть действительным. Я не уверен, что это должно быть отдельным заявлением в Oracle.

+0

Я уже пробовал, но он все еще не работает. – specbk

+0

Спасибо, это сработало! – specbk

2

Да, это потому что вы определили составной первичный ключ, как Primary key (Office_ID, Worker_ID) и, таким образом, ваш FK должен включать оба остальное это приведет к ОФПУ (частичная функциональная зависимость)

Смежные вопросы