[데이터베이스/DB] 기본키와 외래키의 관계

데이터 베이스를 식별 하는 기준으로 키(key) 개념이 있다. 키란 특정 튜플을 식별할 때 사용하는 속성 혹은 속성의 집합을 말한다. 키의 종류는 기본키, 슈퍼키, 후보키, 대체키, 외래키 등으로 나뉘는데, 이번 글에서는 릴레이션(테이블) 간 관계를 맺게 해주는 기본키와 외래키를 중심으로 살펴본다.

슈퍼키(Super Key)

릴레이션에서 튜플(행, 레코드)을 유일하게 식별할 수 있는 값(하나 또는 그 이상)이면 모두 슈퍼키가 될 수 있다. 예를 들어, 고객의 정보가 있는 테이블이 있으면 고객번호, 이름, 주민번호, 주소, 핸드폰 번호 등은 슈퍼키가 될 수 있다.

후보키(Candidate Key)

후보키는 기본키가 될 수 있는 후보로 릴레이션에서 각 튜플을 유일하게 식별할 수 있는 속성들의 집합이다. 즉 다른 데이터와 중복이 있어서는 안 된다. 여러 개를 묶어서 저장할 수도 있다. 후보키가 하나면 그게 자연스럽게 기본키가 되고 여러 개면 그중 기본키를 하나 정해서 사용한다.

기본키(Primary Key)

기본키는 릴레이션을 대표하는 키다. 때문에 기본키를 설정하면 다른 릴레이션의 외래키와 관계를 맺고 상호작용 할 수 있다.

기본키를 선정할 때는 몇 가지 고려할 점이 있다.

  • 릴레이션 내 튜플을 식별할 수 있는 고유한 값을 가져야한다
  • NULL 값은 허용하지 않는다(중복값이 있으면 안되는 특성상 이는 자연스럽다)
  • 키 값이 변하지 않아야 한다
  • 최대한 적은 수의 속성을 가진 게 좋다

 

 

위 테이블을 보면 책 번호, 이름, 출판사, 가격 등이 속성으로 있는데, 이중 유일한 값을 만족하는 BOOKID가 기본키가 된다.

 

 

위 릴레이션 역시 중복되지 않고 유일하게 릴레이션의 데이터를 대표할 수 있는 CUSTID가 기본키가 된다.

외래키(Foreign Key)

외래키는 다른 릴레이션의 기본키를 참조한 키를 말한다.

 

 

위에서 살펴본 두 릴레이션의 기본키를 참조해서

 

 

위와 같이 제3의 릴레이션을 만들 수 있다. 파란색으로 표시한 ORDERID를 기본키로 갖고 다른 릴레이션의 기본키인 CUSTID와 BOOKID를 참조하는 형태다. 이런 방식으로 해당 릴레이션은 외래키를 참조한 릴레이션과 상호작용 하며 데이터를 조인(join)할 수 있다.

외래키는 아래와 같은 특징을 갖는다.

  • 관계 데이터 모델의 릴레이션 간의 관계를 표현한다
  • 다른 릴레이션의 기본키를 참조한다
  • 참조되는 값(기본키)이 변경하면 참조하는 값(외래키)도 변경된다
  • 참조되고 있는 값은 기본키에서 삭제할 수 없다(참조하지 않은 값은 삭제 가능)
  • NULL 값과 중복 값이 허용된다
  • 다른 릴레이션의 기본키를 참조하지 않고 자신의 기본키를 참조하는 외래키도 사용 가능하다
반응형

댓글

Designed by JB FACTORY