**외래키(Foreign Key)**는 한 테이블에서 다른 테이블의 기본키(Primary Key)를 참조하는 컬럼입니다. 외래키는 데이터베이스에서 테이블 간의 관계를 설정하는 중요한 요소로, 데이터의 무결성을 유지하는 데 사용됩니다.
외래키의 주요 목적은 관계형 데이터베이스에서 데이터의 일관성과 무결성을 보장하는 것입니다. 외래키 제약을 통해 참조된 테이블에서 데이터가 삭제되거나 변경되었을 때, 이를 참조하는 테이블에서도 데이터에 대한 적절한 처리를 할 수 있도록 합니다.
외래키 제약에는 ON DELETE와 ON UPDATE 옵션이 있습니다:
ON DELETE:
ON UPDATE:
데이터베이스에서 외래키를 설정하는 DDL(Data Definition Language) 구문은 다음과 같습니다.
-- 부모 테이블 생성 (부서 테이블)
CREATE TABLE department (
id INT NOT NULL, -- 부서 ID
name VARCHAR(100) NOT NULL, -- 부서 이름
PRIMARY KEY (id) -- 기본키
);
-- 자식 테이블 생성 (직원 테이블)
CREATE TABLE employee (
id INT NOT NULL, -- 직원 ID
name VARCHAR(100) NOT NULL, -- 직원 이름
department_id INT, -- 부서 ID (외래키)
hire_date DATE NOT NULL, -- 입사일
salary DECIMAL(10, 2) NOT NULL, -- 급여
PRIMARY KEY (id), -- 직원 ID 기본키
CONSTRAINT fk_department FOREIGN KEY (department_id)
REFERENCES department(id) -- department 테이블의 id를 참조
ON DELETE CASCADE -- 부모가 삭제되면 자식도 삭제
ON UPDATE CASCADE; -- 부모가 업데이트되면 자식도 업데이트
);
-- 기존 테이블에 외래키 추가 (예: employee 테이블에 외래키 추가)
ALTER TABLE employee
ADD CONSTRAINT fk_department FOREIGN KEY (department_id)
REFERENCES department(id) -- department 테이블의 id를 참조
ON DELETE SET NULL -- 부모가 삭제되면 자식의 department_id를 NULL로 설정
ON UPDATE CASCADE; -- 부모가 업데이트되면 자식의 department_id도 업데이트
NULL
로 설정됩니다.NULL
로 설정됩니다.데이터 무결성 보장:
관계 설정:
학생
과 반
간의 관계, 주문
과 고객
간의 관계 등을 명확히 할 수 있습니다.자동화된 데이터 관리:
ON DELETE CASCADE
나 ON UPDATE CASCADE
와 같은 옵션을 사용하여 부모 테이블에서 데이터가 변경되거나 삭제될 때 자식 테이블의 데이터도 자동으로 변경되거나 삭제되도록 할 수 있습니다. 이를 통해 관리가 편리해집니다.데이터베이스 설계의 안정성:
성능 저하:
복잡한 쿼리:
제약이 강함:
유연성 부족:
장점:
단점:
외래키는 테이블을 연결하는 규칙입니다. 예를 들어, 학생 테이블과 반 테이블을 연결할 때 사용됩니다. 외래키를 통해 데이터가 서로 잘 연결되고, 부모 테이블에서 데이터가 삭제되면 자식 테이블도 자동으로 정리됩니다. 다만, 데이터가 많을 때는 속도가 느려질 수 있고, 때로는 데이터를 삭제하거나 수정하는 데 어려움이 있을 수 있습니다.