ora-02270 (1)

오라클에서 테이블에 새로운 PRIMARY KEY를 추가하고 이를 FK로 만들어주고 싶었다.

그러다가 그만 ORA-02270 에러를 만나게 되었다.

만나게 된 상황은 이렇다.

 

테이블 A와 B가 있다.

테이블 A는 a라는 PK가 있고 테이블 B는 (a, b)를 복합PK로 가지고 있었다.

자, 여기서 A와 B테이블에 컬럼c를 추가하고 복합PK로 만들어주려했다.

즉, A의 PK는 (a, c), 그리고 B의 PK는 (a, b, c)가 되는것이다. 그리고 B의 a, c는 FK로 A의 a, c를 참조해야한다.

 

이를 하기위해서 생각했던 순서는 아래와 같다. 

 

1. 테이블 A, B의 PK를 DROP한다.

2. 테이블 A, B에 컬럼c를 추가한다.

3. 테이블 A의 PK로 (a, c)를 선언한다. 

3. 테이블 B의 a를 FK로 선언하면서 A의 a를 참조하도록 한다.

 - alter table B add foreign key (a) references A(a);

4. 테이블 B의 c를 FK로 선언하면서 A의 c를 참조하도록 한다.

 - alter table B add foreign key (c) references A(c);

5. 테이블 B의 PK로 (a, b, c)를 선언한다.

 

하지만 3번에서 02270 에러를 만나게 되었다.

이 에러는 UNIQUE KEY나 PK가 아닌것을 참조하려고 했기 때문에 발생하는 에러이다.

그래서 생각해보니 테이블 A의 PK는 a나 c가 아닌 (a, c)인 것이다.

하여 3, 4번 과정을 묶어서 테이블 B의 FK로 B의 (a, c)가 A의 (a, c)를 참조하도록 설정하였더니 문제가 해결되었다.

 - alter table B add foreign key (a, c) references A(a, c);