검수요청.png검수요청.png

외래키

해시넷
tjswn0425 (토론 | 기여)님의 2020년 8월 14일 (금) 16:52 판 (개요)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)
이동: 둘러보기, 검색

외래키(Foreign Key) 또는 포린키란 하나(또는 여러개)의 다른 릴레이션기본키(PK) 필드를 참조하는 데이터의 참조 무결성(Referential integrity)을 확인하기 위해 사용되는 (Key)를 의미한다. 간략히 FK(에프케이)라고도 한다. [1]

개요[편집]

외래키(FK)의 예제 [2]

외래키(FK, Foreign key)는 한 릴레이션을 다른 릴레이션과 연결해주는 역할을 한다. 외래키가 설정된 릴레이션에 레코드를 입력하면, 기준이 되는 릴레이션의 내용을 참조해서 레코드가 입력된다. 즉, 외래키는 하나의 릴레이션을 다른 릴레이션에 의존하게 만든다. 외래키를 설정하는 방법은 2가지가 있는데 릴레이션을 생성할때 설정하는 방법과 이미 생성된 릴레이션에 ALTER 명령어를 이용하여 설정하는 방법이다. 외래키를 설정할 때, 참조되는(기본키가 있는 릴레이션) 릴레이션의 필드는 반드시 UNIQUE나 PRIMARY KEY 제약 조건이 설정되어 있어야 한다. [3] 또한 외래키의 특징 중 '참조되는 값이 변경되면 참조하는 값도 변경된다.'가 있는데 이를 적용하기 위해선 특정 제약 조건들을 이용하여 설정이 필요하다.

특징[편집]

외래키(FK, Foreign Key)는 관계 데이터 모델의 릴레이션 간의 관계를 표현하고, 다른 릴레이션의 기본키(PK)를 참조한다. 외래키는 몇가지의 주요 특징이 있는데 첫번째, 참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야 한다. 도메인이란 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값들의 집합인데[4] , 외래키는 참조 무결성 조건에 부합해야되기 때문에 도메인이 같아야 한다. [5] 두번째, 참조되는 값이 변경되면 참조하는 값도 변경된다. 첫번째 특징과 연관되어 참조하고 참조되는 릴레이션의 도메인이 같아야되기 때문에 참조되는 값이 변경되면 그에 맞게 참조하는 값도 변경하여 도메인을 서로 같게 해야한다. 세번째, NULL값과 중복 값이 허용된다. 기본키(PK)는 데이터를 구별할 수 있는 고유성을 지니고 있어야하기 때문에 중복과 NULL값이 허용되지않는다. 하지만 외래키(FK)는 정의와 같이 다른 릴레이션을 참조하고 있는데 그게 전부이다. NULL값이 허용됨으로써 데이터를 검색할때, 특정 정보만 모를 경우 NULL로 지정해두고 검색할 수 있다. 네번째, 자기 자신의 기본키(PK)를 참조하는 외래키도 가능하다. 다섯번째, 외래키가 기본키의 일부가 될 수 있다. [6]

외래키 설정 방법[편집]

  • 릴레이션 생성 시 외래키 설정
[CONSTRAINTS 외래키 이름] FOREIGN KEY(컬럼명)
REFERENCES 참조 테이블명(참조컬럼)
// 예제
CREATE TABLE test2_table
(
    ID INT,
    NAME CHAR,
    DEPT INT,
    FOREIGN KEY(DEPT)
    REFERENCES test1_table(ID)
);
  • 릴레이션 생성 후 외래키 설정
ALTER TABLE 테이블명
ADD CONSTRAINTS 외래키 이름 FOREIGN KEY(참조컬럼)
REFERENCES 참조 테이블명(참조컬럼)
// 예제
ALTER TABLE test2_table
ADD CONSTRAINTS DEPT
FOREIGN KEY(ID)
REFERENCES test1_table(ID);

(※본 예시는 Oracle을 기준으로 작성되었다.)


제약 조건[편집]

외래키의 제약 조건에 의해 참조되는(기본키) 릴레이션에서 데이터의 수정이나 삭제가 발생하게 되면, 참조하는(외래키) 릴레이션이 영향을 받게 된다. 이때 참조하고 있는 릴레이션의 동작을 사용자가 제약조건에서 미리 설정이 가능하다. 동작은 크게 수정과 삭제로 나뉜다. 'ON UPDATE'는 참조되는 릴레이션의 값이 수정될 경우에 동작하는 구문이고, 'ON DELETE'는 참조되는 릴레이션의 값이 삭제될 경우에 동작하는 구문이다. 예를 들면 'ON DELETE CASCADE'로 설정되있다면, 참조되는 릴레이션의 값이 삭제될때 CASCADE 방식으로 실행하라는 의미이다.

종류[편집]

  • CASCADE : 참조되는 릴레이션에서 데이터를 수정하거나 삭제하면, 참조하는 릴레이션에서도 수정과 삭제가 같이 발생한다. CASCADE는 제약조건들 중 가장 많이 사용한다.
  • SET NULL : 참조되는 릴레이션에서 데이터를 수정하거나 삭제하면, 참조하는 릴레이션의 데이터는 NULL로 변경된다.
  • NO ACTION : 참조되는 릴레이션에서 데이터를 수정하거나 삭제해도, 참조하는 릴레이션의 데이터는 변경되지않는다. 각 릴레이션이 서로 영향을 받지않는 독립적인 릴레이션으로 사용해야할때 쓰는 특수한 경우이다.
  • SET DEFAULT : 참조되는 릴레이션에서 데이터를 수정하거나 삭제하면, 참조하는 릴레이션의 데이터는 필드의 기본값으로 설정된다.
  • RESTRICT : 참조하는 릴레이션에 데이터가 남아 있으면, 참조되는 릴레이션의 데이터를 삭제하거나 수정할 수 없다. RESTRICT는 CASCADE와 함께 많이 사용되는 제약 조건이다.

각주[편집]

  1. Foreign Key:외래키〉, 《프로그램 개발 지식 공유 사이트(www.devkuma.com)》, 2018-01-09
  2. 2.관계데이터모델〉, 《개인사이트》, 2017-11-14
  3. FOREIGN KEY〉, 《TCPSCHOOL.com》
  4. 릴레이션 용어-속성(애트리뷰트),튜플,도메인,차수,카디날리티〉, 《개인사이트》, 2019-03-01
  5. 키(Key)의 개념 및 종류〉, 《개인사이트》, 2017-10-23
  6. 각 키에 대해서 공부하고 기본키와 외래키의 특징을 알아보자〉, 《개인사이트》, 2018-06-29

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 외래키 문서는 데이터에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.