외래 키(Foreign Key) 제약조건을 설정할 때, 'ON DELETE CASCADE', 'ON DELETE SET NULL', 'ON DELETE RESTRICT' 등의 옵션 중 어떤 경우에 각 옵션을 선택해야 하는지 구체적인 시나리오를 들어 설명해 주세요.
힌트 · ON DELETE CASCADE는 종속 레코드 동시 삭제, SET NULL은 외래 키 값을 NULL로 설정, RESTRICT는 참조 레코드 존재 시 삭제 방지입니다. 데이터의 관계와 비즈니스 로직에 따라 적절히 선택해야 합니다.
모범답안
외래 키 제약 조건의 ON DELETE 옵션은 데이터의 일관성을 유지하는 데 중요한 역할을 합니다.
ON DELETE CASCADE는 주 테이블의 레코드가 삭제될 때, 해당 레코드를 참조하는 모든 외래 키 레코드도 함께 삭제해야 하는 경우에 사용합니다. 예를 들어, '주문' 테이블이 '고객' 테이블을 참조할 때, 고객 정보가 삭제되면 해당 고객의 주문 정보도 함께 삭제하는 것이 자연스러울 때 선택합니다.
ON DELETE SET NULL은 주 테이블의 레코드가 삭제될 때, 외래 키 값을 NULL로 설정하는 옵션입니다. 이 옵션은 외래 키 컬럼이 NULL 값을 허용해야 사용할 수 있습니다. 예를 들어, '직원' 테이블이 '부서' 테이블을 참조할 때, 부서가 삭제되어도 직원은 남아있을 수 있지만, 더 이상 특정 부서에 소속되지 않음을 나타내기 위해 NULL로 설정할 수 있습니다.
ON DELETE RESTRICT는 주 테이블의 레코드를 참조하는 외래 키 레코드가 존재하면 삭제를 막는 옵션입니다. 데이터의 무결성을 가장 강력하게 유지하고 싶을 때 사용합니다. 예를 들어, '상품' 테이블을 '주문상세' 테이블이 참조할 때, 주문 상세 정보가 있는 상품은 삭제할 수 없도록 하여 데이터의 일관성을 유지할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 데이터베이스 설계 면접 질문
- 실무에서 데이터베이스를 설계할 때, 정규화(Normalization)와 비정규화(Denormalization)를 어떤 기준으로 적용해야 하며, 성능상의 이유로 비정규화를 고려해야 하는 상황과 그 단점은 무엇인가요?
- 특정 테이블의 쿼리 성능을 최적화하기 위해 인덱스를 설계해야 합니다. 어떤 인덱스 종류(예: B-tree, Hash, 클러스터링, 논클러스터링)를 고려해야 하며, 복합 인덱스(Composite Index)는 언제 유용하게 사용될 수 있는지 설명해 주세요.
- 회원 관리 시스템을 설계할 때, '이메일 주소'와 '전화번호'를 저장하기 위한 데이터 타입을 선택해야 합니다. 적절한 데이터 타입과 길이를 선택하는 기준은 무엇이며, 잘못된 선택이 성능 및 저장 공간에 미치는 영향은 무엇인가요?
- 뷰(View)와 물질화된 뷰(Materialized View)의 차이점은 무엇이며, 각각 어떤 상황에서 사용하는 것이 적절한가요? 특히 물질화된 뷰가 대용량 데이터 환경에서 쿼리 성능 최적화에 어떻게 기여할 수 있는지 설명해 주세요.
- 대용량 테이블의 관리 및 성능 향상을 위해 파티셔닝(Partitioning)을 고려할 때, 어떤 종류의 파티셔닝(예: Range, List, Hash)을 선택할 수 있으며, 각각의 장단점과 적합한 사용 시나리오는 무엇인가요?
- 데이터베이스 트랜잭션의 격리 수준(Isolation Level)이 무엇이며, 'READ COMMITTED'와 'REPEATABLE READ' 수준의 차이점과 각각 어떤 상황에서 사용해야 하는지 설명해 주세요.