2011-12-28 4 views
1

"순환"외래 키가있는 기존 테이블이 두 개 있습니다. 즉 A 테이블은 테이블 B의 PK를 참조하며 그 반대의 경우도 마찬가지입니다.두 테이블의 외래 키

이제 두 테이블에 행을 삽입하고 싶습니다. 행에는 다른 테이블의 현재 추가 된 값을 참조하는 열이 있으므로 오류가 발생합니다.

서로 참조하는 두 테이블을 채우는 방법은 무엇입니까? Oracle PL/SQL을 사용하십시오.

+0

이 두 테이블 사이에 다른 *'join' * 테이블을 추가하면 어떨까요? – Lion

+0

아래의 사용자와 동의 - 나쁜 데이터 디자인. 하나만 다른 데이터에 의존하도록 데이터를 올바르게 분리하십시오. – tsells

답변

6

순환 참조에 대한 유효한 이유가있는 경우 FK를 다시 작성하고 DEFERRABLE 절을 지정하여이 문제를 해결할 수도 있습니다. 그런 다음 중 하나 또한 제약 조건을 만들 때 INITIALLY DEFERRED 절을 지정하거나 삽입하기 전에 다음 문을 발행 할 수 있습니다 : (제약 조건이 지연된 상태 인 경우

SET CONSTRAINT <constraint_name> DEFERRED; 

는, 제약 조건 검사가 트랜잭션이 끝날 때까지 대기 암시 적 또는 명시 적 확약이 제출 될 때).

6

순환 참조를 제거하십시오.

순환 참조없이 두 테이블과 그 관계를 다시 디자인하십시오.

+1

그래서 원형 참조는 나쁜 디자인 인 "패턴"입니다. 맞습니까? – Cartesius00

+2

예,이 기사를 확인하십시오 (날짜 : 1999 년 7 월) : [sql-by-design-the-circular-reference] (http://www.sqlmag.com/article/quering/sql-by-design-the-circular -reference) –

+2

+1 순환 참조는 이중으로 나쁜 것입니다. 그들은 실생활에 대한 부정확 한 해석이며, 진정한 PITN입니다. – APC