데이터베이스 기초
고객 표(고객ID, 이름)의 기본 키는 고객ID이며, 주문 표(주문ID, 고객ID)의 고객ID는 고객 표의 고객ID를 참조하는 외래 키로 정의되어 있다. 고객 표에는 고객ID가 'C1'과 'C2'인 행만 있다. 이 상태에서 INSERT INTO 주문 VALUES ('O9', 'C5')를 실행했을 때의 결과로 올바른 것은?
- A참조 무결성 제약을 위반하므로 행은 추가되지 않고 오류가 된다
- B행이 추가되고, 고객 표에도 고객ID가 'C5'인 행이 자동으로 추가된다
- C행은 추가되지만 고객ID 값은 NULL로 바뀐다
정답과 해설 보기
정답: A. 참조 무결성 제약을 위반하므로 행은 추가되지 않고 오류가 된다
외래 키는 다른 표(여기서는 고객 표)의 기본 키 등을 참조하는 열로, 참조 대상에 존재하는 값이나 NULL만 넣을 수 있다는 참조 무결성 제약을 지키게 합니다. 고객 표에 'C5'라는 고객은 없으므로, 존재하지 않는 고객의 주문을 추가하려는 조작은 DBMS에 의해 거부되어 오류가 됩니다. 이로써 어느 고객의 것인지 알 수 없는 주문이 남는 것을 막을 수 있습니다. 반대로 주문이 남아 있는 고객의 행을 고객 표에서 삭제하려는 경우에도 기본 동작(NO ACTION)에서는 거부됩니다. 외래 키 정의에 ON DELETE CASCADE를 붙이면, 고객을 삭제했을 때 그 고객의 주문도 연쇄적으로 삭제되게 할 수 있습니다.