한빛 아카데미의 <데이터베이스 개론> 책을 참고하였습니다.
키의 종류 | 특징 | |
Super Key | 슈퍼 키 | 유일성의 특성을 만족하는 속성 또는 속성들의 집합 |
Candidate Key | 후보 키 | 유일성과 최소성을 만족하는 속성 또는 속성들의 집합 |
Primary Key | 기본 키 | 여러 후보 키 중에서 기본으로 사용할 수 있는 키 |
Alternate Key | 대체 키 | 기본 키를 제외한 후보 키들 |
Foreign Key | 외래 키 | 어떤 테이블(Relation)에서 다른 테이블의 기본 키를 참조하는 속성 |
Composite Key | 복합 키 | 2개 이상의 속성(attribute)을 사용하여 유일성의 특성을 만족하는 키 |
Key의 종류 및 특징
※ Uniqueness (유일성) : 한 테이블에서 키로 지정된 속성(Attribute)값은 튜플들 사이에서 구분될 수 있도록 유일해야 한다(고유해야 한다).
※ Minimality (최소성) : 키를 구성하는 데 불필요한 속성은 제외하고 최소한의 속성들로만 키를 구성한다.
★ Super Key
유일성의 특성을 만족하는 속성 또는 속성들의 집합
다음과 같은 테이블(Relation)이 있다고 가정하자
ID | 이름 | 나이 | 직업 | 주소 |
a1 | 김제니 | 27 | 학생 | 서울 강남구 ... |
a2 | 김지수 | 26 | 디자이너 | 경기 군포시 ... |
a3 | 라리사 | 25 | 교사 | 태국 부리람주 ... |
a4 | 박채영 | 25 | 가수 | 뉴질랜드 ... |
Super Key는 유일성을 가지는 속성 또는 속성들의 집합을 의미한다. ID를 제외한 나머지의 속성은 중복될 가능성이 있다. ID는 고유한 값으로 유일성을 만족하는 속성이다. 따라서 ID는 Super Key에 해당한다. 또한 속성들의 집합 역시 Super Key가 될 수 있다. 무작정 두개의 속성이 합쳐지면 유일성이 깨지게 되어 Super Key가 될수 없지만, 고유한 값을 가지는 ID와 다른 속성들이 합쳐진다면 이 속성의 집합 또한 유일할 것이니 역시 Super Key가 될 수 있다. 하지만 Super Key를 구성하는 속성 값들이 많아질수록 비효율적일 수 있으니 잘 고려해야 한다. 그래서 나온 키가 효율성을 고려한 Candidate Key이다.
★ Candidate Key
유일성과 최소성을 만족하는 속성 또는 속성들의 집합
앞서 Super Key의 조건 유일성을 확인하였다. Candidate Key는 Super Key의 조건에서 최소성을 만족해야한다. 위의 테이블에서 만들 수 있는 Super Key의 예 중 ID, {ID, 이름}, {ID, 나이}, {ID, 직업}, {ID, 주소}, {ID, 이름, 나이} ... 등을 확인하였다. 이 중에서 최소성을 만족하여 Candidate Key가 될 수 있는 속성 집합은 ID 하나 뿐이다. {ID, 이름}처럼 두가지의 속성을 가지고 있는 Super Key는 이미 속성 값이 하나인 ID가 있기 때문에 최소성을 만족하지 않는다. 만약 ID 속성이 없다면 {이름, 주소}를 묶어 Key 들이 유일성을 갖도록 해 Candidate Key가 될 수도 있을 것이다.
★ Primary Key
여러 후보 키 중에서 기본으로 사용할 수 있는 키
위 테이블처럼 Candidate Key를 만족하는 속성 집합이 ID 뿐이라면 ID는 Primary Key가 될 수 있다. Primary Key는 ID는 한번 설정되면 바뀔 수 없는 값이라서 Primary Key의 가장 좋은 조건이 될 수 있다. 다음 기본 키를 선택하기 위해 고려해야할 몇가지 기준이 있다.
- Primary Key는 null 값을 가질 수 없다.
- Primary Key로 설정된 속성의 값은 자주 변경이 일어나면 안된다.
- Candidate Key 중 단일 속성의 Key들이 있다면 둘 중 문자열이 작거나, 복잡하지 않은 Key를 Primary Key로 설정한다. → Key가 단순하면 컴퓨터가 처리하기 편함
따라서 다음과 같은 조건을 만족한다면 최적의 Primary Key가 될 수 있다.
★ Alternate Key
기본 키를 제외한 후보 키들
다음과 같은 속성을 가진 테이블이 있다고 가정하자.
ID | 주민번호 | 전화번호 | 이름 | 직업 | 주소 |
Candidate Key로는 ID, 주민번호, 전화번호 등이 적절해 보인다. 이 중 ID가 Primary Key로 설정된다면 주민번호, 전화번호가 Alternate Key가 될 것이다.
★ Foreign Key
어떤 테이블(Relation)에서 다른 테이블의 기본 키를 참조하는 속성
고객 테이블
ID | 이름 | 전화번호 | 주소 |
주문 테이블
주문 ID | 주문 고객 | 주문 제품 | 수량 | 가격 | 구매일 |
고객 테이블과 주문 테이블이 있다. 주문 테이블은 주문한 고객의 정보를 가지고 있어야 해서 `주문고객`이라는 속성을 만들었다. 여기에서 `주문고객`이 Foreign Key가 된다. 주문 테이블에 고객의 정보를 넣기 위해 고객 테이블의 어떤 속성이 가장 적합할까? 주문고객의 정보를 확실히 파악하기 위해서는 고객 테이블의 ID 값을 Foreign Key로 받는 것이 좋다.
그렇다고 Foreign Key에 Primary Key의 정보가 들어가야 하는 것은 아니다. 해당 테이블의 튜플을 구분할 수 있는 속성 값이 있으면 충분하다. 그렇지만 참조하는 테이블의 Primary Key를 사용하는 것이 연관된 튜플을 파악하기 쉬울 것이다.
(Foreign Key에는 null 값이 들어갈 수 있다.)
★ Composite Key
2개 이상의 속성(attribute)을 사용하여 유일성의 특성을 만족하는 키
ID | 이름 | 나이 | 직업 | 주소 |
a1 | 김제니 | 27 | 학생 | 서울 강남구 ... |
a2 | 김지수 | 26 | 디자이너 | 경기 군포시 ... |
a3 | 라리사 | 25 | 교사 | 태국 부리람주 ... |
a4 | 박채영 | 25 | 가수 | 뉴질랜드 ... |
앞서 위 테이블에서 Super Key가 될 수 있는 다양한 속성들의 집합을 확인하였다. {ID, 이름}, {ID, 나이}, {ID, 직업}, {ID, 주소}, {ID, 이름, 나이} ... 등 등이 있었는데, 이들은 모두 속성이 2개 이상이므로 Composite Key가 될 수 있다.
'CS > 데이터베이스' 카테고리의 다른 글
[Database] MongoDB 이해하기 (1) | 2024.01.03 |
---|---|
[Database] NoSQL 이해하기 (0) | 2024.01.03 |
[DATABASE] 인덱스란? (1) | 2023.10.26 |
Transaction (0) | 2022.08.16 |