데이터베이스 관리 시스템(DBMS)에서 키(Key)는 테이블 내의 데이터 행을 고유하게 식별하고, 테이블 간의 관계를 설정하는 데 필수적인 역할을 합니다. DBMS에서 사용되는 대표적인 키 유형은 다음과 같습니다.
DBMS의 주요 키 유형
1. 후보 키 (Candidate Key)
후보 키는 테이블에서 최소성(Minimality)을 만족하면서 모든 데이터 행을 고유하게 식별할 수 있는 속성(또는 속성 집합)을 의미합니다. 하나의 테이블에는 여러 개의 후보 키가 존재할 수 있습니다.
2. 기본 키 (Primary Key)
기본 키는 여러 후보 키 중에서 하나가 선택되어 해당 테이블의 대표 식별자 역할을 하는 키입니다. 기본 키는 테이블의 모든 데이터 행을 고유하게 식별할 수 있어야 하며, 중복 값과 NULL 값을 가질 수 없습니다.
3. 슈퍼 키 (Super Key)
슈퍼 키는 기본 키를 포함하는 상위 집합(Superset)입니다. 슈퍼 키는 기본 키를 포함한 속성들의 집합으로, 테이블의 모든 데이터 행을 고유하게 식별할 수 있습니다. 단, 슈퍼 키에는 불필요한 속성이 포함될 수 있어 최소성은 보장되지 않습니다.
4. 복합 키 (Composite Key)
테이블의 어떤 단일 속성으로도 각 행을 고유하게 식별할 수 없는 경우, 두 개 이상의 속성을 조합하여 키를 만들 수 있습니다. 이렇게 여러 속성을 결합하여 구성한 키를 복합 키라고 합니다.
5. 대체 키 (Secondary Key)
후보 키 중 하나만 기본 키로 선택되며, 선택되지 않은 나머지 후보 키들은 대체 키(또는 보조 키)라고 부릅니다. 대체 키는 기본 키가 될 자격이 있지만 선택되지 않은 키입니다.
6. 외래 키 (Foreign Key)
외래 키는 한 테이블의 속성 값이 다른 테이블의 기본 키 역할을 하는 경우를 말합니다. 외래 키는 두 테이블을 연결하는 관계(Relationship)를 형성하는 데 유용합니다. 외래 키 컬럼에는 데이터를 신중하게 입력해야 하며, 잘못된 데이터가 입력되면 두 테이블 간의 관계가 무효화될 수 있습니다.
예시를 통한 키 유형 이해하기
다음 세 개의 테이블을 통해 각 키 유형을 구체적으로 살펴보겠습니다.
<STUDENT> 테이블
| Student_Number | Student_Name | Student_Phone | Subject_Number |
|---|---|---|---|
| 1 | Andrew | 6615927284 | 10 |
| 2 | Sara | 6583654865 | 20 |
| 3 | Harry | 4647567463 | 10 |
<SUBJECT> 테이블
| Subject_Number | Subject_Name | Subject_Instructor |
|---|---|---|
| 10 | DBMS | Korth |
| 20 | Algorithms | Cormen |
| 30 | Algorithms | Leiserson |
<ENROLL> 테이블
| Student_Number | Subject_Number |
|---|---|
| 1 | 10 |
| 2 | 20 |
| 3 | 10 |
슈퍼 키 (Super Key)
<STUDENT> 테이블의 슈퍼 키는 다음과 같습니다.
{Student_Number}
{Student_Phone}
{Student_Number, Student_Name}
{Student_Number, Student_Phone}
{Student_Number, Subject_Number}
{Student_Phone, Student_Name}
{Student_Phone, Subject_Number}
{Student_Number, Student_Name, Student_Phone}
{Student_Number, Student_Phone, Subject_Number}
{Student_Number, Student_Name, Subject_Number}
{Student_Phone, Student_Name, Subject_Number}
<SUBJECT> 테이블의 슈퍼 키는 다음과 같습니다.
{Subject_Number}
{Subject_Number, Subject_Name}
{Subject_Number, Subject_Instructor}
{Subject_Number, Subject_Name, Subject_Instructor}
{Subject_Name, Subject_Instructor}
<ENROLL> 테이블의 슈퍼 키는 다음과 같습니다.
{Student_Number, Subject_Number}
후보 키 (Candidate Key)
- <STUDENT> 테이블: {Student_Number} 또는 {Student_Phone}
- <SUBJECT> 테이블: {Subject_Number} 또는 {Subject_Name, Subject_Instructor}
- <ENROLL> 테이블: {Student_Number, Subject_Number}
기본 키 (Primary Key)
- <STUDENT> 테이블: {Student_Number}
- <SUBJECT> 테이블: {Subject_Number}
- <ENROLL> 테이블: {Student_Number, Subject_Number}
복합 키 (Composite Key)
- <ENROLL> 테이블: {Student_Number, Subject_Number}
대체 키 (Secondary Key)
- <STUDENT> 테이블: {Student_Phone}
- <SUBJECT> 테이블: {Subject_Name, Subject_Instructor}
외래 키 (Foreign Key)
{Subject_Number}는 <STUDENT> 테이블의 외래 키이면서 동시에 <SUBJECT> 테이블의 기본 키입니다. 이처럼 외래 키는 두 테이블 간의 참조 관계를 형성하여 데이터의 일관성을 유지하는 데 중요한 역할을 합니다.