데이터베이스 설계에서 테이블 간의 관계를 정의하는 것은 매우 중요합니다. 이를 위해 SQL에서는 외래 키 제약 조건(Foreign Key Constraint)을 제공합니다. 이번 포스팅에서는 외래 키 제약 조건에 대해 자세히 살펴보겠습니다.
외래 키 제약 조건이란?
외래 키 제약 조건은 한 테이블의 열(컬럼)이 다른 테이블의 기본 키(Primary Key) 또는 고유 키(Unique Key)를 참조하도록 만드는 제약 조건입니다. 이를 통해 테이블 간의 관계를 정의하고, 데이터 무결성을 보장할 수 있습니다.
예를 들어, 다음과 같은 두 개의 테이블이 있다고 가정해 봅시다:
departments 테이블
- department_id (기본 키)
- department_name
employees 테이블
- employee_id (기본 키)
- employee_name
- department_id (외래 키)
여기서 employees
테이블의 department_id
열은 departments
테이블의 department_id
열을 참조하는 외래 키 제약 조건이 설정되어 있습니다.
외래 키 제약 조건의 특징
- 참조 무결성 보장: 외래 키 제약 조건을 통해 부모 테이블의 기본 키 또는 고유 키를 자식 테이블에서 참조하도록 함으로써, 데이터 간의 관련성을 유지할 수 있습니다.
- 데이터 삽입/수정 제한: 외래 키 제약 조건에 의해 자식 테이블에 부모 테이블에 없는 키 값을 삽입하거나 수정할 수 없습니다.
- 데이터 삭제 제한: 부모 테이블의 행을 삭제하려면 먼저 자식 테이블의 관련 행을 삭제해야 합니다. 이를 통해 데이터 무결성을 보장할 수 있습니다.
- ON DELETE/UPDATE 옵션: 부모 테이블의 데이터가 삭제/수정될 때 자식 테이블의 데이터를 어떻게 처리할지를 지정할 수 있습니다.
외래 키 제약 조건 생성 및 관리
외래 키 제약 조건은 다음과 같이 테이블 생성 시 또는 alter 명령을 통해 추가할 수 있습니다:
-- 테이블 생성 시 외래 키 제약 조건 추가
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
employee_name VARCHAR(50),
department_id INT,
CONSTRAINT fk_department FOREIGN KEY (department_id)
REFERENCES departments(department_id)
);
-- 기존 테이블에 외래 키 제약 조건 추가
ALTER TABLE employees
ADD CONSTRAINT fk_department FOREIGN KEY (department_id)
REFERENCES departments(department_id);
이때 ON DELETE
및 ON UPDATE
옵션을 사용하여 부모 테이블의 데이터 변경 시 자식 테이블의 동작을 지정할 수 있습니다:
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
employee_name VARCHAR(50),
department_id INT,
CONSTRAINT fk_department FOREIGN KEY (department_id)
REFERENCES departments(department_id)
ON DELETE CASCADE
ON UPDATE SET NULL
);
이 경우 부모 테이블의 행이 삭제되면 자식 테이블의 관련 행도 삭제되고, 부모 테이블의 행이 수정되면 자식 테이블의 관련 행의 department_id
가 NULL
로 설정됩니다.
외래 키 제약 조건은 데이터베이스 설계에서 매우 중요한 역할을 합니다. 이를 통해 테이블 간의 관계를 정의하고, 데이터 무결성을 보장할 수 있습니다. 외래 키 제약 조건을 적절히 활용하면 더 안정적이고 신뢰할 수 있는 데이터베이스를 구축할 수 있습니다.
'SQL' 카테고리의 다른 글
데이터베이스 정규화(Normalization) (1) | 2024.11.21 |
---|---|
[SQL 실전 팁] REPLACE로 안전하게 데이터 일괄 수정하기 (0) | 2024.11.16 |
SQL 기본 문법 (0) | 2024.11.12 |
SQL의 DISTINCT 문: 중복 제거와 고유 값 추출 (0) | 2024.10.25 |