데이터베이스를 설계할 때 가장 중요한 개념 중 하나가 바로 기본 키(Primary Key)와 외래 키(Foreign Key)입니다. 이번 글에서는 DBMS에서 두 키가 어떤 역할을 하며, 어떤 점에서 서로 다른지 자세히 알아보겠습니다.
기본 키(Primary Key)란?
기본 키는 테이블 내에서 각 레코드를 고유하게 식별하기 위해 사용되는 핵심 제약 조건입니다. 주요 특징은 다음과 같습니다.
- 특정 열(column)의 데이터가 중복 없이 유일(unique)하도록 보장합니다.
- 관계형 데이터베이스에서 레코드를 고유하게 식별하는 역할을 합니다.
- 하나의 테이블에는 기본 키가 오직 하나만 허용됩니다.
- 'UNIQUE' 제약 조건과 'NOT NULL' 제약 조건이 결합된 형태입니다.
- 따라서 기본 키 열에는 NULL 값을 저장할 수 없습니다.
- 부모 테이블에서 기본 키 값은 다른 테이블이 참조하고 있기 때문에 임의로 삭제할 수 없습니다.
- 임시 테이블(temporary table)에는 암묵적으로(implicitly) 정의될 수 있습니다.
기본 키 생성 예제 (SQL)
CREATE TABLE table_name (
col_name int NOT NULL PRIMARY KEY,
...
);
외래 키(Foreign Key)란?
외래 키는 한 테이블의 열이 다른 테이블의 기본 키를 참조하면서 두 테이블 사이의 관계를 연결해 주는 제약 조건입니다. 주요 특징은 다음과 같습니다.
- 관계형 데이터베이스 테이블에서 하나의 열 또는 여러 열의 그룹으로 구성됩니다.
- 두 테이블 간의 데이터를 연결하는 링크(link) 역할을 합니다.
- 다른 테이블의 기본 키에 대응되는(analogous) 필드입니다.
- 하나의 테이블에 여러 개의 외래 키를 정의할 수 있습니다.
- 중복된 값을 포함할 수 있습니다.
- NULL 값을 허용합니다.
- 자식(child) 테이블에서는 해당 값을 삭제할 수 있습니다.
- 로컬 또는 전역 임시 테이블에는 외래 키 제약 조건을 정의할 수 없습니다.
외래 키 생성 예제 (SQL)
CREATE TABLE table_name (
col_name int NOT NULL PRIMARY KEY,
col_name int FOREIGN KEY REFERENCES Persons(col_name)
);
기본 키 vs 외래 키 비교 요약
| 구분 | 기본 키 (Primary Key) | 외래 키 (Foreign Key) |
|---|---|---|
| 목적 | 레코드를 고유하게 식별 | 테이블 간 관계 연결 |
| 허용 개수 | 테이블당 1개 | 테이블당 여러 개 가능 |
| NULL 허용 | 불가 | 가능 |
| 중복 값 | 허용 안 됨 | 허용됨 |
| 값 삭제 | 부모 테이블에서 삭제 불가 | 자식 테이블에서 삭제 가능 |
| 임시 테이블 | 암묵적 정의 가능 | 정의 불가 |
마무리
기본 키는 테이블 내 데이터의 고유성과 무결성을 보장하는 장치이고, 외래 키는 테이블 간의 참조 무결성(referential integrity)을 유지하며 관계를 형성하는 장치입니다. 두 키의 차이를 정확히 이해하면 더 안정적이고 효율적인 데이터베이스 스키마를 설계할 수 있습니다.