Две таблицы ссылаются друг на друга: Как вставить строку в базу данных Oracle? - PullRequest
4 голосов
/ 25 марта 2012

У меня есть две таблицы

  1. Department
  2. Professor

, в котором Department имеет атрибут с именем HeadID, ссылающийся на Professor и Professor имеет атрибут с именем DeptID, ссылающийся на Department

Они образуют круговые отношения.

Но проблема в том, как вставить строку в любую из этих таблиц?

Oracle пожаловался на «родительский ключ не найден» после того, как я попытался вставить строку.

Ответы [ 5 ]

11 голосов
/ 25 марта 2012

Вы можете определить одно из ограничений внешнего ключа как DEFERRABLE и отложить проверку ограничений до конца вашей транзакции (вместо проверки в конце оператора, который заканчивается «родительский ключ не найден»).Читайте здесь

1 голос
/ 25 марта 2012

Другие решения, описанные здесь, более просты.
Но если вы действительно хотите, чтобы БД описывала ваш бизнес (что не обязательно является лучшим подходом), тогда вы можете иметь другую таблицу, скажем, DEPT_HEAD_POSITIONS.таблица Department будет иметь FK (HeadID), относящийся к этой таблице, а таблица Professor будет иметь другое поле, допускающее обнуление, как FK для этой новой таблицы.

Теперь, что у вас есть:

  • должности начальников отделов
  • отделов (которые должны иметь должность руководителя)
  • профессоров (которые должныпринадлежат отделу и может быть начальником отдела)
0 голосов
/ 26 марта 2012

Если у вас есть полномочия на изменение схемы, вам следует.Если нет, то я думаю, что самый простой и лучший подход описан в комментарии deathApril.

В том случае, когда вы хотите добавить новый факультет и нового профессора, который его возглавляет, вам лучше всего:

  1. Добавление профессора в другой отдел
  2. Добавление факультета с профессором из шага 1 в качестве главы
  3. Обновление записи профессора из шага 1 для ссылки на его новый созданный факультетна шаге 2
0 голосов
/ 25 марта 2012

Oracle и SQL Server не допускают циклические ссылки, потому что всегда существует проблема при удалении строки из таблицы, имеющей зависимости, в другую строку из другой таблицы (внешний ключ), которая ссылается на удаляемую строку ..... Длябольше информации: Нажмите здесь

0 голосов
/ 25 марта 2012

Внешний ключ, состоящий из нескольких столбцов, может позволить одному из столбцов содержать значение, для которого в ссылочных столбцах отсутствует соответствующее значение, согласно стандарту SQL-92.Чтобы избежать этой ситуации, создайте ограничения NOT NULL для всех столбцов внешнего ключа

для ссылки

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

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