기본 패턴
text
CREATE TABLE posts (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
title TEXT NOT NULL
);설명
- 외래 키는 한 테이블의 열이 다른 테이블의 기본 키나 고유 키를 참조하도록 강제하는 제약입니다.
- 이 제약이 있으면 존재하지 않는 사용자의 글처럼 관계가 깨진 데이터를 넣지 못하게 막을 수 있습니다.
ON DELETE와ON UPDATE는 부모 행이 바뀌거나 지워질 때 자식 행을 어떻게 처리할지 정합니다.CASCADE는 함께 지우고,SET NULL은 참조를 비우고,RESTRICT또는 기본 동작은 삭제를 막는 방향으로 이해하면 됩니다.- 외래 키는 단순한 문법이 아니라, 관계형 데이터베이스가 "관계"를 실제로 보장하는 핵심 장치입니다.
짧은 예제
text
ALTER TABLE comments
ADD CONSTRAINT comments_post_id_fkey
FOREIGN KEY (post_id)
REFERENCES posts(id)
ON DELETE CASCADE;빠른 정리
| 요소 | 역할 |
|---|---|
| 외래 키 | 다른 테이블의 키 참조 강제 |
REFERENCES users(id) | 참조 대상 지정 |
ON DELETE CASCADE | 부모 삭제 시 자식도 삭제 |
ON DELETE SET NULL | 부모 삭제 시 참조 비움 |
주의할 점
CASCADE는 편리하지만 영향 범위가 큽니다. 부모 하나를 지웠을 때 하위 데이터가 얼마나 연쇄적으로
사라질지 먼저 생각하고, 복구 비용이 큰 데이터라면 더 보수적인 규칙을 택하는 편이 좋습니다.
참고 링크
2 sources