이번 시간에는 키의 종류에 대해 알아보겠습니다. 인터넷에서 찾아보면 키의 개념을 설명해주는 글들이 나와있지만 설명이 어렵고 추상적인 것이 많아 처음 보는 사람들은 이해하기 어려울 것 같습니다. 그래서 이 게시글을 안 올릴 수가 없더라구요 ㅋㅋㅋ 그래서 키의 종류를 알아보고 쉽게 풀어서 설명해드릴려고 합니다.
우선 아래와 같이 테이블이 있다고 가정하고 설명하겠습니다.
(1) 슈퍼키 (Super Key)
- 각 행을 유일하게 식별할 수 있는 속성들의 집합입니다.
- 서로 구분만 할 수 있다면 '슈퍼키'라고 할 수 있습니다.
- 위의 테이블로 예시:
- [학번] (O) : 학번만 가지고 학생들을 구분할 수 있으므로 슈퍼키가 맞습니다.
- [주민등록번호] (O) : 주민등록번호만 가지고도 학생들을 구분할 수 있으므로 슈퍼키가 맞습니다.
- [이름] (X) : 이름은 서로 같을 수 있기 때문에 구분하지 못하므로 슈퍼키가 아닙니다.
- [생년월일] (X) : 생년월일 역시 서로 같을 수 있기 때문에 슈퍼키가 아닙니다.
- [이름, 생년월일] (O) : 이름과 생년월일의 조합으로 학생들을 구분할 수 있으므로 슈퍼키가 맞습니다.
- 이 외) [학번, 주민등록번호], [학번, 이름], [학번, 생년월일], [주민등록번호, 이름], [주민등록번호, 생년월일], [학번, 주민등록번호, 이름], [학번, 주민등록번호, 생년월일], [학번, 이름, 생년월일], [주민등록번호, 이름, 생년월일], [학번, 주민등록번호, 이름, 생년월일]
(O) : 구분할 수 있는 속성이 포함되기만 하면 각 행을 식별할 수 있으므로 슈퍼기라고 할 수 있습니다.
(2) 후보키 (Candidate Key)
- 각 행을 유일하게 식별할 수 있는 "최소한의" 속성들의 집합입니다.
- 서로 구분할 수 있으면서 불필요한 속성들이 없어야 '후보키'라고 할 수 있습니다.
- 위의 테이블로 예시:
- [학번] (O) : 학생들을 구분할 수 있고 속성이 하나 뿐이므로 후보키가 맞습니다.
- [주민등록번호] (O) : 학생들을 구분할 수 있고 속성이 하나 뿐이므로 후보키가 맞습니다.
- [이름] (X) : 이름은 서로 같을 수 있기 때문에 후보키가 아닙니다.
- [생년월일] (X) : 생년월일 역시 서로 같을 수 있기 때문에 후보키가 아닙니다.
- [이름, 생년월일] (X) : 학생들을 구분할 수는 있으나 [학번] 하나 또는 [주민등록번호] 하나만 가지고도 구분할 수 있습니다. 따라서 속성 2개를 조합할 필요가 없으므로 후보키가 아닙니다.
- 이 외) [학번, 주민등록번호], [학번, 이름], [학번, 생년월일], [주민등록번호, 이름], [주민등록번호, 생년월일], [학번, 주민등록번호, 이름], [학번, 주민등록번호, 생년월일], [학번, 이름, 생년월일], [주민등록번호, 이름, 생년월일], [학번, 주민등록번호, 이름, 생년월일]
(X) : 마찬가지로 [학번] 하나 또는 [주민등록번호] 하나만 가지고도 구분할 수 있는데 불필요한 속성들이 붙어있으므로 후보키가 아닙니다.
(3) 기본키 (Primary Key)
- 후보키들 중에서 하나를 메인으로 선택한 키입니다.
- 위의 테이블에서는 [학번]을 메인으로 선택했으므로 [학번]이 기본키가 됩니다.
- MySQL의 'PRIMARY KEY' 를 떠올리시면 됩니다.
- 비유: 명문대 합격생들 중에서 대표로 선정된 학생이 기본키라고 할 수 있습니다.
(4) 대체키 (Alternate Key)
- 기본키를 제외한 나머지 후보키들을 의미합니다.
- 위의 테이블에서는 [학번]을 메인으로 선택했으므로 [학번] 이 외에 [주민등록번호]가 대체키가 됩니다.
- MySQL의 'UNIQUE' 를 떠올리시면 됩니다.
- 비유: 명문대 합격생들 중 대표로 선정된 학생 이 외의 나머지 학생들이 대체키라고 할 수 있습니다.
(5) 외래키 (Foreign Key)
- 한 테이블이 다른 테이블의 기본키를 참조해서 테이블 간의 관계를 만드는 것을 의미합니다.
- 어떤 테이블의 식별자를 끌어와서 그것에 대한 정보를 또 추가한다고 이해하시면 됩니다.
- MySQL의 'FOREIGN KEY' 를 떠올리시면 됩니다.
- 취미 테이블의 [학번]은 학생 테이블의 [학번]을 참조해서 학생마다 취미가 무엇인지를 나타내고 있으므로 외래키 입니다.
'IT강의 > 데이터베이스' 카테고리의 다른 글
데이터의 가공 및 처리 (0) | 2021.05.24 |
---|---|
부서 별 최고 급여를 직원명과 함께 출력 (0) | 2021.04.21 |
세 번 연속적인 숫자 출력 (0) | 2021.04.21 |
중복되는 메일 주소 출력 (0) | 2021.04.21 |
트랜잭션의 4가지 특징: ACID (0) | 2021.04.20 |