외래키 참조 옵션

부모 행이 바뀔 때, 자식 행을 막을지 정리할지 결정합니다.

외래키의 기본 목적은 부모 없는 자식 행을 막는 것입니다. ON DELETEON UPDATE는 부모 삭제나 키 변경이 일어났을 때 그 관계를 어떻게 유지할지 정합니다.

departments dept_id = 10
employees dept_id = 10
삭제/수정 시점 FK 옵션 실행

삭제를 막는 선택

무결성 우선
RESTRICT

참조 중이면 즉시 거부

자식 행이 남아 있으면 부모 삭제나 키 변경을 허용하지 않습니다.

NO ACTION

최종 검사에서 위반이면 거부

결과는 RESTRICT와 비슷하지만, DBMS와 제약 설정에 따라 검사 시점이 다를 수 있습니다.

자식을 정리하는 선택

정책 필요
CASCADE

삭제는 자식 행 삭제, 갱신은 FK 값 변경

ON DELETE CASCADE는 자식 행을 지우고, ON UPDATE CASCADE는 자식 FK를 새 부모 키로 맞춥니다.

SET NULL

자식 행은 남기고 FK를 비움

직원의 부서가 사라져도 직원 기록은 보존해야 할 때 적합합니다. FK 컬럼은 NULL을 허용해야 합니다.

SET DEFAULT

미리 정한 기본값으로 이동

지원 DBMS와 기본값의 존재 여부를 확인해야 합니다. 기본값도 부모 테이블에 존재해야 안전합니다.

기본값

DBMS별 기본 동작을 확인하고, 운영 설계는 삭제 거부부터 검토합니다.

CASCADE

한 번의 삭제가 여러 테이블로 번지므로 데이터 보존 정책과 함께 검토합니다.

ON UPDATE

부모 키를 자주 바꾸는 설계는 드뭅니다. 키 변경 자체가 필요한지 먼저 확인합니다.