[Database] 각 키에 대해서 공부하고 기본키와 외래키의 특징을 알아보자

키(key)

키는 데이터베이스에서 데이터의 사용 및 관계 표현에 가장 중요한 개념이다. 키라는 용어는 무엇인가를 유일하게 식별한다는 의미가 있다. 관계 데이터베이스에서 키는 릴레이션에서 특정 투플을 식별할 때 사용하는 속성 혹은 속성의 집합이다. 즉 키가 되는 속성은 반드시 값이 달라서 투플들을 서로 구별할 수 있어야 한다. 즉 아래 그림에서 키는 고객번호, 주민번호, 핸드폰이 될 수 있다 3개다 절대로 중복되는 값이 없어 투플들을 식별할 수 있기 때문이다. 


하지만 아래 그림처럼 투플을 식별할 수 있는 속성이 없다. 그래서 (고객번호, 도서번호)나 (고객번호, 주문일자)와 같은 집합을 키로 사용할 수 있다.




슈퍼키(super key)

슈퍼키는 투플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합을 말한다. 즉 투플을 식별할 수 있으면 모두 슈퍼키가 될수 있다. 위 고객 릴레이션에서 (주민번호), (주민번호, 이름), (고객번호, 이름, 주민번호, 주소, 핸드폰) 등 여러 개가 슈퍼키가 될 수 있다,.



후보키(candidate key)

후보키는 투플을 유일하게 식별할 수 있는 속성의 최소 집합이다. 즉 슈퍼키 중에서 최소의 속성으로 집합된것이 후보키가 된다. 고객 릴레이션에서 여러개의 슈퍼키가 있는데 고객번호와 주민번호, 핸드폰번호가 각각 하나씩의 집합으로 이루어져 있으므로 후보키가 될 수 있다



기본키(PK, Primary Key)

기본키는 후보키 중 하나를 선정하여 대표로 삼는 키를 말한다. 후보키가 하나뿐이라면 그 후보키를 기본키로 사용하면 되고 여러 개라면 릴레이션의 특성을 반영하여 하나를 선택하면 된다.

후보키 중에서 내가 고객번호를 기본키로 선정하겠다고 하면 기본키가 되는 것이다. 릴레이션 스키마를 표현할 때 기본키는 속성아래 밑줄을 그어 표시한다. 

ex) 고객(고객번호, 이름, 주민번호, 주소, 핸드폰)


기본키 선정시 고려사항

  • 릴레이션 내 투플을 식별할 수 있는 고유한 값을 가져야 한다.
  • NULL 값은 허용하지 않는다.
  • 키 값의 변동이 일어나지 않아야 한다.
  • 최대한 적은 수의 속성을 가진 것이라야 한다.
  • 향후 키를 사용하는 데 있어서 문제 발생 소지가 없어야 한다.


대리키(surrogate key, artificial key)

기본키가 보안을 요하거나, 여러 개의 속성으로 구성되어 복잡하거나, 마땅한 기본키가 없을 때는 일렬번호 같은 가상의 속성을 만들어 기본키로 삼는 경우가 있다. 이러한 키를 대리키 혹은 인조키라고 한다. 예를 들어 위에 있는 고객 릴레이션에서 마땅한 기본키가 없어 (고객번호, 도서번호) 와 같이 기본키가 설정 되었을 경우 주문번호 속성을 만들어 줌으로써 주문번호를 기본키로 삼는다.



대체키(alternate key)

대체키는 기본키로 선정되지 않은 후보키를 말한다. 고객 릴레이션의 경우 고객번호와 주민번호 중 고객번호를 기본키로 정하면 주민번호가 대체키가 된다.



외래키(FK, Foreign key)

외래키는 다른 릴레이션의 기본키를 참조하는 속성을 말한다. 외래키는 다른 릴레이션의 기본키를 참조하여 관계 데이터 모델의 특징인 릴레이션 간의 관계를 표현한다. 아래 주문릴레이션에서 우리는 고객 릴레이션의 기본키인 고객번호와 도서릴레이션의 기본키인 도서번호를 참조하여 쓰는데 주문 릴레이션에서는 고객번호와 도서번호가 외래키가 되고, 주문번호가 기본키가 된다.



외래키가 성립하기 위해 참조하고 참조되는 양쪽 릴레이션의 도메인이 서로 같아야 한다. 또한 참조되고 릴레이션의 기본키 값이 변경되면 이 기본키를 참조하는 외래키 값 역시 변경되어야 한다. 

외래키 사용 시 참조하는 릴레이션과 참조되는 릴레이션이 꼭 다른 릴레이션일 필요는 없다. 즉 자기 자신의 기본키를 참조할 수도 있다. 아래 릴레이션에서 자기 자신의 기본키를 참조하고 있다. 박지성의 멘토는 NULL이고 김연아의 멘토는 3번인 장미란인걸 알 수 있다. 이처럼 자기 자신을 참조하는 것이 가능하다.


외래키의 특징

  • 관계 데이터 모델의 릴레이션 간의 관계를 표현한다.

  • 다른 릴레이션의 기본키를 참조하는 속성이다.

  • 참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야 한다.

  • 참조되는 값이 변경되면 참조하는 값도 변경된다.

  • NULL 값과 중복 값 등이 허용된다.

  • 자기 자신의 기본키를 참조하는 외래키도 가능하다.

  • 외래키가 기본키의 일부가 될 수 있다.

[각 키의 포함 관계 및 정의 요약]




박우창, 남송휘, 이현룡, 데이터베이스 개론과 실습, 한빛아카데미

참고 사이트 : http://mangkyu.tistory.com/21?category=761304

댓글

Designed by JB FACTORY