데이터베이스에서 Key란, 튜플을 식별할 수 있는 기준이 되는 것을 의미한다.

 

위와 같은 테이블이 주어졌을 때, 튜플을 구별하기 위해 우리는 각 열의 속성을 이용할 것이다.

 

주민번호를 사용할 수도 있고, 이름을 사용할 수도 있고, 거주지를 사용할 수도 있고, 직업을 사용할 수도 있다.

물론, (주민번호 + 이름)의 조합으로 여러 개의 속성을 함께 사용할 수도 있다.

 

이 모든 것들이 Key라고 할 수 있다.

 

Key 중에서도, 조금 더 유용한 Key를 식별하기 위해 사용하는 두 가지의 조건이 있다.

 

유일성과 최소성

유일성이란, 모든 튜플을 식별할 수 있는 것을 의미한다.

 

예를 들어, 전국에 있는 모든 사람의 주민번호와 이름이 담긴 데이터 테이블이 있다고 해보자.

해당 테이블에서 이름 정보를 가지고 전국의 모든 사람을 식별할 수는 없다. 왜냐하면, 같은 이름을 가진 사람이 여럿 존재할 수 있기 때문이다.

 

하지만, 주민번호의 경우는 다르다. 모든 국민이 서로 다른 고유한 번호를 보유하게 된다. 즉, 주민번호를 이용한다면 전 국민을 모두 식별할 수 있게 된다.

 

이처럼, 테이블에 포함된 모든 튜플을 식별할 수 있는 기준이 되는 Key에 대해 유일성을 만족한다고 한다.

 

최소성은, 유일성을 만족하는 Key중에서 속성의 개수가 최소가 되는 것을 의미한다.

 

전 국민의 주민번호와 이름이 담긴 데이터 테이블이 있다고 했을 때, 위에서 말했듯이 주민번호를 이용하면 전국민을 식별할 수 있게 된다. 하지만, (주민번호 + 이름) 조합으로도 전 국민을 식별하는 것은 충분히 가능하다.

하지만, 주민번호만 가지고서도 식별이 가능한데 이름까지 함께 사용하는 것은 다소 비효율적일 수 있을 것이다.

 

유일성을 만족하는 key중에서도 그 속성의 개수가 최소가 되는 key에 대해 최소성을 만족한다고 한다.

 

Key의 종류

Key에는 슈퍼키, 후보키, 기본키, 대체키, 외래키가 있다.

하나씩 알아보자.

 

슈퍼키 : 유일성을 만족하는 키

슈퍼키란, 여러 키 중 유일성을 만족하는 키를 의미한다.

 

위의 테이블을 보자. 전화번호의 경우 홍길동과 최아무개가 겹치기 때문에 전화번호를 이용해서는 모두를 식별할 수 없다.

생일 또한, 홍길동과 박철수가 겹치기 때문에 생일로도 모두를 식별할 수는 없다.

 

하지만, 이름과 거주지의 경우엔 겹치는 사람이 없기 때문에 모두 식별할 수 있다.

이처럼, 생일과 전화번호처럼 중복으로 인해 모두를 식별할 수 없는 Key는 유일성을 만족하지 못한다고 할 수 있다.

 

위의 테이블에서 이름과 거주지는 유일성을 만족한다.

하지만, 앞에서 말했듯이 하나의 키는 여러 개의 속성으로 구성될 수 있다.

 

즉, 슈퍼키는 (이름), (거주지) 뿐만이 아니라 (이름 + 거주지)도 될 수 있다.

 

또한, 생일과 전화번호도 단독으로 사용해서는 모두를 식별할 수 없지만 (이름 + 전화번호) 조합이나 (전화번호, 생일) 조합으로는 모두를 식별할 수 있게 된다.

 

그러므로 (이름 + 전화번호), (전화번호 + 생일) 등도 슈퍼키라고 할 수 있다.

 

후보키 : 슈퍼키 중 최소성을 만족하는 키 ( 유일성과 최소성을 모두 만족하는 키 )

앞에서 말했듯이, 최소성이란 유일성을 만족하는 key중 그 속성의 개수가 최소인 것을 의미한다고 하였다.

위에서 첨부한 표의 경우, 슈퍼키는 (이름), (거주지), (이름 + 거주지), (이름 + 전화번호), (전화번호 + 생일), (이름 + 전화번호 + 거주지) 등 많은 것이 존재한다.

 

하지만, 이름이나 거주지만을 사용해서도 모두를 식별할 수 있는데 굳이 2개 3개씩 속성을 사용할 필요는 없다.그렇기 때문에, 속성의 개수가 최소인 키를 따로 분류하고 있으며 이를 후보키라고 한다.

 

위의 표에서는 (이름)과 (거주지)가 후보키라고 할 수 있다.

 

기본키 : 후보키 중 기본으로 사용되는 키

여러 개의 후보키가 존재한다고 했을 때, 과연 모든 후보키가 계속 후보키일 수 있을까?

위의 표에서 지금은 이름과 거주지가 모두 최소성과 유일성을 만족하지만 데이터가 추가되면서 경우가 달라질 수 있다.

예를 들어, 부산에 사는 어떤 사람이 위의 테이블에 추가된다면? 그 때부터 더 이상 거주지는 후보키가 되지 못한다. 

반면, 주민번호의 경우엔 어떠한 경우에도 두 사람이 중복되는 경우가 없기 때문에 어떤 상황에서도 후보키로 분류될 수 있다.

 

이처럼, 데이터베이스의 상황에 따라 특정 키는 그 속성이 변경될 가능성이 있을 수도 있다. 이러한 이유로, 절대 변하지 않거나 가장 변할 가능성이 적은 후보키를 Default로 사용하게 되고, 이렇게 Default로 사용하는 키를 기본키라고 한다.

 

대체키 : 후보키 중 기본키로 선택되지 않은 키

데이터베이스의 상황에 따라, 기본키는 언제든 바뀔 수가 있다. 이 때, 기본키가 될 수 있는 후보들을 대체키라고 한다.

 

외래키 : 다른 테이블의 기본키를 참조하는 키

데이터베이스에는 항상 하나의 테이블만 있는 것은 아니다.

2개, 3개의 테이블이 있을 수도 있고 수백, 수천 개의 테이블이 있을 수도 있다.

이 때, 다른 테이블의 튜플을 참조하기 위해 사용하는 것이 외래키이다.

병원에서 환자의 정보를 기록하기 위해, 테이블에 주민번호, 이름, 거주지, 병명, 과, 수납금 모두를 하나의 테이블에 기록할 수도 있다.

 

하지만, 위처럼 테이블이 분리된 상황에서 주민번호만 알면 이름과 거주지를 다른 테이블에서 조회할 수 있으며, 병명만 알아도 해당 과를 조회할 수 있다. 그러므로, 하나의 테이블에 주민번호와 병명 수납금만 저장하더라도 모든 데이터를 조회할 수 있는 것이다.

 

이 때, 정보를 참조하기 위해서 다른 테이블의 기본키를 저장하게 되는데 이 것이 외래키이다.

(주민번호, 병명)

+ Recent posts