PostgreSQL스키마와 제약

외래 키와 삭제 규칙

테이블 사이의 관계를 안전하게 유지하는 외래 키와, 부모 행 삭제 시 어떤 동작을 할지 정하는 규칙을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

text
CREATE TABLE posts (
  id BIGSERIAL PRIMARY KEY,
  user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  title TEXT NOT NULL
);

설명

  • 외래 키는 한 테이블의 열이 다른 테이블의 기본 키나 고유 키를 참조하도록 강제하는 제약입니다.
  • 이 제약이 있으면 존재하지 않는 사용자의 글처럼 관계가 깨진 데이터를 넣지 못하게 막을 수 있습니다.
  • ON DELETEON 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