데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 다른 튜플들과 구별할 수 있는 유일한 기준이 되는 Attribute(속성)
최악의 경우 모든 Attribute들을 사용하면 튜플을 고유하게 식별할 수 있는데 다음과 같은 이유로 최소한의 Attribute로 이루어진 키에 관심을 갖게 된다.
1. 불필요하게 중복되는 Attribute가 많아지면 데이터 저장 공간이 낭비되고, 쿼리 성능이 저하될 수 있다.
릴레이션 A
신용카드번호 | 이름 | 주민등록번호 | 주소 |
1 | A | XXXX-XXXX | 서울특별시... |
2 | B | YYYY-YYYY | 인천광역시... |
릴레이션 B
신용카드번호 | 이름 | 주민등록번호 | 주소 | 사용금액 |
1 | A | XXXX-XXXX | 서울특별시... | 1,000,000 |
2 | B | YYYY-YYYY | 인천광역시... | 600,000 |
릴레이션 A, B에 키를 (신용카드번호, 이름, 주민등록번호, 주소)라고 했을 때, 연관된 릴레이션마다 (신용카드번호, 이름, 주민등록번호, 주소)이 키값들이 릴레이션에 중복되서 들어가게 된다.
불필요하게 중복되므로 데이터베이스 저장공간이 낭비되고, 많은 양의 키 값을 처리해야 하므로 쿼리 성능이 저하될 수 있다.
2. 키가 작을수록 인덱스의 크기가 줄어들고 인덱스 검색하는 시간이 단축된다.
릴레이션의 튜플들에 접근하기 위해 키에 인덱스들을 만드는데, 키가 작을 수록 인덱스의 크기가 줄어들어 시간이 단축된다.
인덱스에 대한 설명은 다음에..
- 수퍼키(SuperKey)
한 릴레이션 내의 특정 튜플을 고유하게 식별하는 하나의 Attribute 또는 Attribute들의 집합이다.
릴레이션 A
신용카드번호 | 이름 | 주민등록번호 | 주소 |
1 | A | XXXX-XXXX | 서울특별시... |
2 | B | YYYY-YYYY | 인천광역시... |
릴레이션 A에서 수퍼키는 (신용카드번호, 주소), (주민등록번호, 이름), (주민등록번호)등이 수퍼키가 될 수 있다.
수퍼키의 단점
튜플들을 고유하게 식별하는데 필요하지 않은 Attribute들을 포함할 수 있다. (주의)
- 후보키 (Candidate Key)
각 튜플을 고유하게 식별하는 최소한의 Attribute들의 모임
후보키의 Attribute들 중 한 개의 Attribute를 빼면 고유하게 식별하는 능력을 잃어버린다.
수퍼키 중 하나인 (신용카드번호, 주소)에서 신용카드번호는 후보키이다.
모든 릴레이션에는 한 개 이상의 후보키가 존재한다. (최악의 경우 모든 Attribute를 사용해야 한다)
후보키가 두 개 이상의 Attribute로 구성되어 있는 것을 복합 키(Composite Key)라고 한다.
- 기본키 (Primary Key)
한 개의 릴레이션에서 두 개 이상의 후보키가 있으면 DB설계자가 이들 중 한 개를 기본 키로 설정한다.
(후보키가 한 개인 경우 후보키가 기본키가 된다.)
자연스러운 기본 키를 선택하는 것이 좋다.
자연스러운 기본 키가 없는 경우 인위적인 키를 Attribute를 릴레이션에 추가할 수 있다.
추가된 키를 대리키(Surrogate Key)라고 한다.
ex) 신용카드 회사의 고객 릴레이션에서 신용카드번호와 주민등록번호가 후보키가 된다.
실질적으로 신용카드 회사에서는 분실 신고 빈도보다 정상적인 카드 결제 빈도가 훨씬 높으므로 신용카드 회사의 고객 릴레이션에서 신용카드번호를 기본 키로 설정하는 것이 좋다.
기본키 설정시 고려사항 |
- 모든 튜플을 고유하게 식별해야하므로 null값이나 중복된 값을 가질 수 없다. - Attribute값이 변경될 가능성이 높은 Attribute는 기본키로 설정하지 않는다. - 가능하면 작은 정수 값이나 짧은 문자열을 갖는 Attribute - 복합 기본키를 가능하면 피하는 것이 좋다. |
- 대체 키(Alternate Key)
기본 키로 선정되지 않는 후보키를 의미
릴레이션 A
신용카드번호 | 이름 | 주민등록번호 | 주소 |
1 | A | XXXX-XXXX | 서울특별시... |
2 | B | YYYY-YYYY | 인천광역시... |
해당 릴레이션에서 신용카드번호가 기본 키로 설정한 경우 주민등록번호는 대체 키가 된다.
그림을 보면 한 번에 이해할 수 있다.
- 외래키 (Foreign Key)
다른 릴레이션의 기본키를 참조하는 Attribute
R-DBMS에서 릴레이션들 간의 관계를 나타내기 위해 사용
외래키의 여러 유형
□ 다른 릴레이션의 기본 키를 참조하는 외래키
□ 자체 릴레이션의 기본 키를 참조하는 외래 키
외래 키인 직속상관은 기본 키인 직원 번호를 참조하고 있다.
직속상관이 없는 경우 NULL로 표현이 가능하다.
□ 기본 키의 구성요소가 되는 외래 키
수강 릴레이션은 과목 릴레이션의 기본 키와 학생 릴레이션의 기본 키를 참조하여 구성된다.
수강 릴레이션에 최소한의 Attribute로 구성된 기본키가 없으므로 (학번, 과목번호)가 기본 키가 된다.
- 자연키
기본키만을 위한 데이터가 아니라 비즈니스 모델에서 자연스레 나오는 속성으로 기본 키를 결정
- 인조키
비즈니스 모델과 달리 키를 위한 데이터이다.
대리키와 같은 의미
# 참고한 사이트