IT강의/데이터베이스

키의 종류 (슈퍼키, 후보키, 기본키, 대체키, 외래키)

샤핑 2021. 5. 5. 03:20
728x90
반응형

이번 시간에는 키의 종류에 대해 알아보겠습니다. 인터넷에서 찾아보면 키의 개념을 설명해주는 글들이 나와있지만 설명이 어렵고 추상적인 것이 많아 처음 보는 사람들은 이해하기 어려울 것 같습니다. 그래서 이 게시글을 안 올릴 수가 없더라구요 ㅋㅋㅋ 그래서 키의 종류를 알아보고 쉽게 풀어서 설명해드릴려고 합니다.

 

우선 아래와 같이 테이블이 있다고 가정하고 설명하겠습니다.

 

 

(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' 를 떠올리시면 됩니다.

- 취미 테이블의 [학번]은 학생 테이블의 [학번]을 참조해서 학생마다 취미가 무엇인지를 나타내고 있으므로 외래키 입니다.

728x90
반응형
LIST