앞선 포스팅에서, 테이블은 집합이기 때문에 레코드 간 순서가 큰 의미를 가지지 않는다고 말했습니다. 이렇게 순서가 없는 레코드들을 구분하기 위해서 사용하는 것이 key입니다. 키는 필드들의 일부로 각 레코드들을 유일하게 식별해낼 수 있는 식별자(identifier)입니다.
예를 들어, 신입생 테이블의 주민등록번호 필드 혹은 재학생 테이블의 학번 필드 등이 이러한 key에 해당합니다. 다시말해, key는 관계형 데이터 모델에서 특정 레코드를 구별하거나 탐색하기 위한 유일한 방법입니다.
수퍼키(super key)
super key는 어떠한 제약 조건이 없이 레코드들을 식별가능한 필드의 집합을 말합니다. 슈퍼키의 경우. 식별만이 가능합니다.
후보키(candidate key)
후뵈는 최소한의 필드로 구성된 키입니다.
기본키(Primary key)
후보키 중 하나를 골라, 식별자로 정의한 키입니다. 위에서 관계형 데이터 모델에서 특정 레코드를 구별하거나 탐색하기 위한 유일한 방법이 key라는 말을 했는데요, 여기서 말한 key가 바로 기본키(primary key)입니다. 하나의 필드로 구성된 후보키를 DBMS를 사용하는 집단에 맞게 선정합니다.
예를 들어, 한 학생의 데이터로 학번, 이름, 주민등록번호가 있다고 가정해봅시다. 학생의 대학교에서는 기본키로 학번을 선정합니다. 대한민국에서는 기본키로 학생의 주민등록번호를 선정할 것입니다. 기본키는 단순히 데이터를 식별하는 키라고 생각하면 편할 것입니다
기본키는 식별자의 기능을 한다고 했습니다. 그런데. 이러한 primary key가 null값을 갖게 되면 식별할 수 있는 값이 없기 때문에 기본키, primary key는 null값을 가질 수 없습니다.
외래키(foreign key)
외래키는 다른 테이블의 기본키를 참조하는 필드 집합입니다. 현실세계에서 데이터를 관리하는 테이블이 한 개가 될 수 없습니다. 그런데, 각 테이블들끼리 이어지는 데이터가 있기 때문에 그 데이터를 이어주기 위해 사용하는 것이 foreign key입니다. 예를 들어 대학교에서 학생들을 관리하는 테이블을 살펴보겠습니다.
학번 | 주민등록번호 | 이름 | 학년 | 학과번호 |
2391154 | 000101 - 1234567 | 문현빈 | 1 | 920 |
2291155 | 123456 - 2890123 | 노시환 | 2 | 920 |
2191156 | 234567 - 3901234 | 김인환 | 3 | 923 |
2091157 | 345678 - 4012345 | 채은성 | 4 | 925 |
2271149 | 456789 - 3123456 | 정은원 | 2 | 921 |
학과번호 | 학과명 | 과사무실 |
920 | 컴퓨터공학과 | 105호 |
921 | IT융합공학과 | 201호 |
923 | 전자공학과 | 207호 |
925 | 산업공학과 | 206호 |
보통은 이렇게 연관있는 데이터들끼리 테이블을 만들어 관리하게 됩니다. 이 경우, 학생테이블만을 보고는 어느 학과에 재학중인지 알기가 어렵습니다. 이럴 때, 학생 테이블의 학과번호와 학과테이블의 학과번호를 연결해주는 역할을 foreign key가 합니다.
외래키(foreign key)의 성질에 대해 알아보겠습니다. 외래키에 참조하는 테이블이 있고, 참조되는 테이블이 있습니다. 참조하는 테이블을 자식테이블이라고 하고, 참조되는 테이블을 부모테이블이라고 합니다. 위 예시에선 학생 테이블이 부모 테이블이고, 학과테이블이 자식테이블이 됩니다.
이 때, foreign key로 사용할 키는 참조 되는 테이블, 즉 부모테이블의 기본키만이 올 수 있습니다.
외래키와 기본키의 이름이 달라도 상관은 없습니다. 그러나 통념적으로 헷갈리지 않기 위해서 대부분 같은 이름을 사용합니다.
이상으로 관계형 데이터의 key에 대해 알아보았습니다. 다음 포스팅에선 관계형 데이터베이스 및 관계 대수에 대해 알아보겠습니다!