ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION366 / 1500
데이터베이스난이도 중하5분 답변 목표 · 보강본

회원 삭제 때 주문까지 CASCADE로 지우자는 제안이 나왔습니다. 외래키 삭제 정책은 무엇을 기준으로 정하나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

외래키는 참조 무결성을 강제하지만 부모의 생명주기가 자식의 생명주기와 같다는 뜻은 아닙니다. 주문·결제처럼 독립 보관 의무와 역사적 의미가 있는 기록은 회원 삭제와 동시에 물리 삭제하면 안 될 수 있습니다.

동작 원리와 전제

CASCADE는 관련 행을 함께 지우고 RESTRICT·NO ACTION은 참조가 남은 삭제를 제한하며 SET NULL은 관계를 끊는 선택입니다. 세부 검사 시점과 deferred 제약은 엔진별로 다릅니다. NULL이 의미상 허용되는지, 삭제된 회원의 주문을 어떻게 표시할지 먼저 정합니다.

선택과 실패 처리

개인정보 삭제는 주문 자체 삭제와 익명화·필드 분리·접근 제한 중 정책에 맞는 방법을 선택합니다. 대규모 cascade는 많은 행·인덱스·로그를 바꾸며 긴 잠금과 복제 지연을 만들 수 있습니다. 작은 배치로 지울 때는 중간 상태와 재시작 키를 설계해야 합니다.

구체적인 사례와 검증

강좌의 마지막 수강 신청을 지우는 것과 강좌 자체를 지우는 것은 서로 다른 사건입니다. 수강 기록이 과거 성적을 보존해야 하면 강좌를 비활성화하고 참조를 남기는 모델이 맞을 수 있습니다. 삭제 정책은 관계형 제약 문법 이전에 각 데이터의 보존 의미에서 결정합니다. 대규모 cascade는 애플리케이션 로그에 부모 한 행 삭제만 보이더라도 수많은 자식 변경을 만들 수 있으므로 실제 영향 행·로그·락을 봅니다. 새 외래키를 도입할 때는 기존 고아 행을 먼저 대사하고, 삭제 migration 중 동시 삽입이 새 고아를 만들지 못하도록 단계와 권한을 정합니다.

부모 삭제·자식 동시 삽입·다단계 cascade·중단 후 재개를 시험합니다. ORM 옵션과 실제 DB 제약이 같은지 확인하며 애플리케이션만 검사해 경쟁을 남기지 않습니다. 외래키는 관계의 존재 규칙이고 삭제 권한과 보존 정책까지 자동 결정하지 않습니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 핵심 구분: 외래키는 참조 무결성을 강제하지만 부모의 생명주기가 자식의 생명주기와 같다는 뜻은 아닙니다.
  • 선택 조건: 개인정보 삭제는 주문 자체 삭제와 익명화·필드 분리·접근 제한 중 정책에 맞는 방법을 선택합니다.
  • 검증 기준: 부모 삭제·자식 동시 삽입·다단계 cascade·중단 후 재개를 시험합니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • 부모 데이터가 삭제되면 모든 자식의 보존 의미도 사라진다고 한다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • 여러 사실을 한 행에 묶어 보관하면 마지막 행 삭제에서 어떤 원본 사실을 잃을 수 있나요?
  • 구버전 쓰기가 남아 있는 상태에서 표현을 바꿀 때 호환·백필·전환을 어떻게 나누나요?
  • 최종 변경 행은 적어도 실제 읽기·잠금이 넓다면 어떤 실행 계획과 보유 시간을 확인하나요?

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기