как связать 2 таблицы с более чем одной взаимосвязью - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть 2 таблицы.Один - Сотрудник, а другой - отдел.Таким образом, первое отношение - это отношение один ко многим, когда один сотрудник может работать в одном отделе, а в одном отделе может быть много сотрудников.Поэтому для этого мы помещаем внешний ключ в таблицу сотрудников.

Второе отношение также является отношением 1 ко многим, хотя и является необязательным.Это управляет отношениями.Таким образом, один сотрудник (необязательно, поскольку не каждый сотрудник делает это) может управлять одним или несколькими отделами, но один отдел управляется одним сотрудником.Следовательно, внешний ключ находится в отделе.

create table dept(
    departmentName varchar2(10),
    mgrId integer,
    primary key(departmentName),
    foreign key mgrId references employee(empId)
);

create table employee(
    empId integer;
    empName varchar2(100),
    departmentName varchar2(10),
    primary key(empId),
    foreign key(departmentName) references dept(departmentName));

Так что технически я так хочу, но я знаю, что получу ошибку, потому что одна из таблиц, на которые я ссылаюсь, даже не была созданаеще.Так я должен просто сохранить одно отношение, которое не является обязательным?Или я должен сделать отдельную таблицу для менеджеров?

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Вы можете сначала создать обе таблицы, а затем добавить ограничения.

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

Чтобы избежать этого, вы можете, как предлагается, создать отдельную таблицу дляобрабатывать отношения менеджера.

Примечание

Можно также сохранить отдел сотрудника в другой отдельной таблице вместо внешнего ключа сотрудника.Хотя это обеспечило бы согласованное решение для обоих отношений, это может быть не лучшим выбором для дизайна: как прокомментировал @APC, сложно применять правило, согласно которому у таблицы должен быть дочерний элемент, поэтому количество таких таблиц следует сохранитьдо минимума.

0 голосов
/ 31 декабря 2018

Вы можете добавить внешние ключи после создания таблиц, чтобы пропустить ошибку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...