데이터베이스를 공부하시다 보면 테이블(table) 과 더붙에 키(Key) 에 대한 이론은 빼놓을 수가 없을겁니다. 이번 포스팅에서는 데이터베이스의 다양한 Key 의 종류와 특징들에 대해 정리해 보겠습니다.
(본 포스팅은 테이블에 대한 기초지식이 있으셔야 이해하기 수월합니다.)
우선 각 Key 의 속성을 이해하려면 유일성과 최소성 이라는 개념에 대해 알고있는게 좋습니다.
- 유일성 : 하나의 키 값으로 튜플을 유일하게 식별할 수 있는 성질이며,
- 최소성 : 키의 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질입니다.
이때 유일성은 각각의 튜플을 서로 구분할 수 있어야하는 특징을 지닙니다.
이렇게 말씀드려도 잘 이해가 안되실 수 있습니다. 지금 당장은 이해 못하셔도 괜찮으니, 아래 다양한 key 들의 특징에 대해 이해하시다보면 자연스래 유일성, 최소성도 이해가 되실테니 크게 걱정 안하셔도 됩니다.
키(key)란 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 다른 튜플들과 구별할 수 있는 유일한 기준이 되는 속성 을 의미합니다.
이러한 키는 크게 5가지의 종류로 구분이되는데, 이러한 키들을 구분하는 기준점이자 특징이 바로 유일성과 최소성 이라고 할 수 있습니다.
키의 종류는 아래와 같습니다.
슈퍼키(SuperKey), 후보키(Candidate Key), 기본키(Primary Key), 대체키(Replacement Key), 외래키(Foreign Key)
아래에서 5가지의 키들에 대해 설명해보겠습니다.
유일성을 만족하는 키. 어떤 속성끼리 묶던 중복값이 나오지 않고 서로 구별만 할 수 있으면 된다.
(ex. 학번, 주민번호, 이름+나이)
위 테이블은 팀원 4명에 대한 정보를 나타낸 것으로, 학번, 이름, 주민등록번호, 나이이라는 속성이 존재합니다.
이러한 각 팀원을 구분할 수 있는 것은 타인과 절대 겹치지 않는 학번, 주민번호가 될 수 있습니다.
또한 이름과 나이을 묶어서 하나의 속성으로써 구분지을 수 도 있습니다. 즉, 이름과 나이을 하나의 속성으로 보고 타인과 절대 겹치지 않는 속성이자 구분을 지을 수 있는 키(key) 가 될 수 있습니다.
이렇듯 어떤 속성끼리 묶던 중복값이 안나오고 서로 구별만 할 수 있다면 그것은 바로 슈퍼키가 될 수 있습니다.
즉, 위 예제에서는 "학번", "주민번호", 그리고 "이름+나이" 가 슈퍼키가 될 수 있는 것입니다.
또한 이렇듯 각 속성들이 중복값이 등장하는 않는 특성을 유일성 이라고 부릅니다.
유일성과 최소성을 만족하는 키. 기본키가 될 수 있는 후보이기 떄문에 후보키라고 부른다.
(ex. 주민등록번호, 학번 등)
슈퍼키들 중에서 속성을 최소한의 개수로하여 테이블의 각 객체들을 구분할 수 있어야 후보키가 될 수 있습니다.
예를들어 학번, 슈퍼키, 주민번호 슈퍼키는 속성들이 각각 1개씩으로만 이루어져 있습니다.
반면 이름+나이 슈퍼키는 이름과 나이를 묶어서 2개의 속성으로 구성되어 있습니다. 이름+나이 슈퍼키는 주민번호 슈퍼키와 학번 슈퍼키보다 속성이 많아서 최소성을 만족하지 못합니다.
이렇듯 키의 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질을 최소성이라고 합니다.
후보키들 중에서 하나를 선택한 키로, 최소성과 유일성을 만족하는 속성이다.
테이블에서 기본키는 유일하게 1개만 지정할 수 있습니다.
위 테이블에서 기본키가 될 수 있는것은 학번키와 주민번호키입니다.
후보키가 2개 이상일 경우 그 중에서 어느 하나를 기본키로 지정하고 남은 후보키들을 대체키라고 한다.
그렇다면 위에서 학번키가 기본키(primary key) 가 된다면, 나머지 주민번호키는 무엇인가!? 라고 물었을때, 이렇게 기본키가 되지 못한 나머지 후보키(candidate key)들을 대체키(replacement key) 라고 부릅니다.
즉, 위 테이블에서는 주민번호 키가 바로 대체키가 되겠죠~?
어떤 테이블(relation) 간의 기본 키(primary key) 를 참조하는 속성으로, 테이블간의 관계를 나타내기 위해서 사용된다.
외래키는 위 4개의 키들과 별개의 개념(?) 으로써, 별도로 이해하셔야할 개념입니다.
참조될 테이블 A 와 그를 참조할 테이블이 있다고 가정하면,
테이블 A의 열의 값은 기본키(Primary key) 로 설정되어 있어야합니다.
특히 외래키는 RDMS 에서 자주 쓰이게될 개념으로써, 각 데이터베이스 테이블사이의 관계를 매핑할 때 사용됩니다.
어느 엔티티쪽에서 상대 엔티티와 반드시 단 하나의 관계를 가지는 것
ex) 학생 A - 학번 12191638
한쪽 엔티티가 관계를 맺은 엔티티쪽의 여러 객체를 가질 수 있는것
ex) 부모 - 여러명의 자식
여러명의 자식 입장에서 한 쌍의 부모중어떤 부모에 속해있는지를 표현해야하므로, 부모 테이블의 PK 를 자식 테이블에 FK 로 집어넣어서 관계를 표현합니다.
ex) 학원 - 학생의 관계
⇒ 한 학원에는 여러명의 학생이 수강할 수 있으므로 1:n 관계를 가집니다. 반대로 학생도 여러개의 학원을 수강할 수 있으므로, 이 사이에서도 1:m 관계를 가집니다. 따라서 학원과 학생은 n:m 관계를 가진다고 할 수 있겠습니다.