외래 키(Foreign Key)란?

다른 표의 기본 키(또는 유일한 열)를 참조하는 열. 참조 대상에 존재하는 값이나 NULL만 넣을 수 있다는 참조 무결성 제약에 의해, 존재하지 않는 행을 가리키는 데이터가 들어가는 것을 막는다. 참조 대상의 행을 삭제·갱신했을 때의 동작(거부, 연쇄 삭제 등)도 지정할 수 있다.

일본어 명칭: 外部キー

외래 키(Foreign Key)은(는) 데이터베이스 기초 등 1개 분야의 연습 문제 5개에 나와요.

분야: 데이터베이스 기초

도전해 보기: 외래 키(Foreign Key) 관련 문제

고객 표(고객ID, 이름)의 기본 키는 고객ID이며, 주문 표(주문ID, 고객ID)의 고객ID는 고객 표의 고객ID를 참조하는 외래 키로 정의되어 있다. 고객 표에는 고객ID가 'C1'과 'C2'인 행만 있다. 이 상태에서 INSERT INTO 주문 VALUES ('O9', 'C5')를 실행했을 때의 결과로 올바른 것은?

  1. A참조 무결성 제약을 위반하므로 행은 추가되지 않고 오류가 된다
  2. B행이 추가되고, 고객 표에도 고객ID가 'C5'인 행이 자동으로 추가된다
  3. C행은 추가되지만 고객ID 값은 NULL로 바뀐다
정답과 해설 보기

정답: A. 참조 무결성 제약을 위반하므로 행은 추가되지 않고 오류가 된다

외래 키는 다른 표(여기서는 고객 표)의 기본 키 등을 참조하는 열로, 참조 대상에 존재하는 값이나 NULL만 넣을 수 있다는 참조 무결성 제약을 지키게 합니다. 고객 표에 'C5'라는 고객은 없으므로, 존재하지 않는 고객의 주문을 추가하려는 조작은 DBMS에 의해 거부되어 오류가 됩니다. 이로써 어느 고객의 것인지 알 수 없는 주문이 남는 것을 막을 수 있습니다. 반대로 주문이 남아 있는 고객의 행을 고객 표에서 삭제하려는 경우에도 기본 동작(NO ACTION)에서는 거부됩니다. 외래 키 정의에 ON DELETE CASCADE를 붙이면, 고객을 삭제했을 때 그 고객의 주문도 연쇄적으로 삭제되게 할 수 있습니다.

해설 속 외래 키(Foreign Key)

외래 키(Foreign Key)이(가) 나오는 문제 (5)

  1. 고객 표(고객ID, 이름)의 기본 키는 고객ID이며, 주문 표(주문ID, 고객ID)의 고객ID는 고객 표의 고객ID를 참조하는 외래 키로 정의되어 있다. 고객 표에는 고객ID가 'C1'과 'C2'인 행만 있다. 이 상태에서 INSERT INTO 주문 VALUES ('O9', 'C5')를 실행했을 때의 결과로 올바른 것은?
  2. 수강 표(학생번호, 과목번호, 성적)는 어느 학생이 어느 과목을 수강하여 어떤 성적을 받았는지를 기록한다. 한 학생은 여러 과목을 수강하고, 한 과목은 여러 학생이 수강한다. 같은 학생이 같은 과목을 두 번 등록하는 일은 없을 때, 이 표의 기본 키로 적절한 것은?
  3. 사원 표(사원번호, 이름, 부서코드, 부서명)의 기본 키는 사원번호이며, 모든 열은 하나의 값만 가진다. 함수 종속은 사원번호 → 이름, 사원번호 → 부서코드, 부서코드 → 부서명이다. 이 표의 정규형으로 올바른 것은?
  4. E-R 다이어그램에서 학생과 과목 사이에 '한 학생은 여러 과목을 수강하고, 한 과목은 여러 학생이 수강한다'는 다대다 관계가 있다. 이 관계를 관계형 데이터베이스의 표로 구현하는 방법으로 적절한 것은?
  5. 트랜잭션이 가져야 할 ACID 특성 중 '계좌 A에서 출금하여 계좌 B에 입금하는 이체 처리가, 도중에 장애가 일어나도 둘 다 수행되거나 전혀 수행되지 않거나 둘 중 하나가 된다'는 성질은?

관련 용어

기본 키(Primary Key) SQL 제3정규형(3NF) E-R 다이어그램(E-R Diagram) 관계형 데이터베이스(Relational Database) 트랜잭션(Transaction) ACID 특성(ACID Properties) 2단계 로킹(2PL) 격리 수준(Isolation Level) 뷰(View)

용어집으로 돌아가기