키의 종류
- 키(key)는 릴레이션에 포함된 튜플들을 구분해주는 속성 또는 속성들의 집합
- 관계 데이터 모델에서는 키를 슈퍼키, 후보키, 기본키, 대체키, 외래키의 5가지로 분류 할 수 있음
슈퍼키(super key)
- 유일성의 특성을 만족하는 속성 또는 속성들의 집합
- 유일성은 하나의 릴레이션에서 슈퍼키로 지정된 속성의 값은 각 튜플마다 고유해야 하며, 동일한 값이 중복될 수 없음
고객아이디는 슈퍼키가 될 수 있고, 고객이름은 슈퍼키가 될 수 없음. 단, (고객아이디, 고객이름)은 슈퍼키가 될 수 있음 즉, 고객아이디를 포함하는 속성 집합은 모두 슈퍼키가 될 수 있음
(고객아이디, 고객이름)과 같이 유일성을 만족하기 위해 불필요한 속성의 값까지 확인하는 비효율적인 작업이 필요함
후보키(cadidate key)
- 유일성과 최소성을 만족하는 속성 또는 속성들의 집합
- 최소성(minimality)은 키를 구성하고 있는 여러 속성 중에서 하나라도 없으면 튜플을 유일하게 구별할 수 없는, 꼭 필요한 최소한의 속성들로만 키를 구성하는 특성
- 후보키는 튜플을 유일하게 구별하기 위해 꼭 필요한 최소한의 속성들로만 이루어지므로 슈퍼키 중에서 최소성을 만족하는 것이 후보키가 됨
고객 아이디는 후보키가 될 수 있지만, (고객아이디, 고객이름)은 후보키가 될 수 없음
- 후보키가 되기 위해 만족해야 하는 유일성과 최소성의 특성은 새로운 튜플이 삽입되거나 기존 튜플의 속성 값이 바뀌어도 유지되어야 함
기본키(primary key)
- 여러 후보키 중에서 행을 식별하기 위해 기본적으로 사용할 키
- 후보키가 한 개만 존재하면 당연히 해당 후보키를 기본키로 선택해야 하겠지만 여러 개일 경우에는 데이터베이스 사용 환경을 고려하여 적합한 것을 기본키로 선택
기본키를 선택할때 기준
- 널 값을 가질 수 있는 속성이 포함된 후보키는 기본키로 부적합
- 값이 자주 변경될 수 있는 속성이 포함된 후보키는 기본키로 부적합
- 단순한 후보키를 기본키로 선택한다
대체키(alternate key)
- 대체키는 기본키로 선택되지 못한 후보키
고객 번호가 기본키고, (고객이름, 고객 주소) 집합은 대체키가 됨
외래키(foreign key)
- 외래키는 어떤 릴레이션에 소속된 속성 또는 속성 집합이 다른 릴레이션의 기본키가 되는 키
- 다른 릴레이션의 기본키를 그대로 참조하는 속성의 집합이 외래키
- 하나의 릴레이션에는 외래키가 여러 개 존재할 수 있음
- 외래키가 반드시 다른 릴레이션을 참조할 필요는 없음. 참조하는 릴레이션과 참조되는 릴레이션이 같을 수도 있음.
- 즉, 외래키 자신이 속한 릴레이션의 기본키를 참조하도록 외래키를 정의할 수도 있음
- 외래키는 기본키를 참조하지만 기본키가 아니기 때문에 널 값을 가질 수 있음
- 서로 다른 튜플이 같은 값을 가질 수 있음
대리키(Surrogate Key)
- 마땅한 기본키가 없을때 일련번호와 같이 속성을 추가하여 그것을 키로 삼는 키. 인조키라고도 불림.
- 자연키(natural key)와 대칭되는 개념인데,비즈니스와 관련 없는 임의로 만들어진 키로써, auto_increment가 이에 속함
- 사용하는 이유
- 기본키의 저장 공간을 줄여줌
- 중요한 데이터를 대체하여 보안의 효율을 높임(ex: 주민등록번호나 아이디를 PK로 한경우)
- 데이터 변경에 영향을 덜 받기 위함 (ex: 주민등록번호 폐지시)
Reference
https://terms.naver.com/list.naver?cid=58430&categoryId=58430&so=st4.asc