2011-12-28 3 views
1

У меня есть две существующие таблицы с «круговыми» внешними ключами, то есть таблица A ссылки PK в таблице B и наоборот.Внешний ключ в двух таблицах

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

Как заполнить две таблицы, ссылающиеся друг на друга? Использование Oracle PL/SQL.

+0

Что делать, если вы добавили еще одну таблицу 'join' * между этими двумя таблицами? – Lion

+0

Согласитесь с нижеприведенным - плохой дизайн данных. Разделите данные правильно, так что только один зависит от другого. – tsells

ответ

6

Если у вас есть веская причина для циркулярной ссылки, вы также можете обойти это, воссоздав свой FK и указав предложение DEFERRABLE. Затем можно также указать INITIALLY DEFERRED пункта при создании ограничения или выдать следующую инструкцию перед вашими вставками:

SET CONSTRAINT <constraint_name> DEFERRED; 

Если ограничение находится в отложенном состоянии, проверка ограничений не будет ждать до конца сделки (когда имплицируется неявная или явная фиксация).

6

Удалить круглые ссылки.

Редизайн двух таблиц и их взаимосвязь - без круговых ссылок.

+1

Итак, круговые ссылки - плохой дизайн «узор», правильно? – Cartesius00

+2

Да, проверьте эту статью (Дата: июль 1999): [sql-by-design-the-round-reference] (http://www.sqlmag.com/article/quering/sql-by-design-the-circular -reference) –

+2

+1 Циркулярные ссылки - это плохая вещь. Они являются неточной интерпретацией реальной жизни, и они - настоящий PITN для работы. – APC

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