Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

부모 테이블의 레코드 삭제 시 자식 테이블 데이터 무결성을 유지하는 방법

두 개의 테이블이 외래 키(Foreign Key)로 연결되어 있을 때, 부모 테이블에서 자식 테이블에도 존재하는 레코드를 삭제하면 참조 무결성 문제가 발생할 수 있습니다. 이러한 상황에서 데이터 무결성을 유지하기 위해 사용할 수 있는 대표적인 방법은 다음과 같습니다.

ON DELETE CASCADE

ON DELETE CASCADE 옵션은 부모 테이블에서 특정 값이 삭제될 때, 해당 외래 키 값을 참조하는 자식 테이블의 레코드까지 함께 자동으로 삭제하는 방식입니다. 예를 들어 고객 정보를 담는 부모 테이블에서 한 고객을 삭제하면, 그 고객과 관련된 주문 내역이 저장된 자식 테이블의 레코드도 함께 제거되어 고아 레코드(orphan record)가 남지 않도록 합니다.

ON DELETE SET NULL

ON DELETE SET NULL 옵션은 부모 테이블에서 외래 키 값이 삭제될 때, 해당 값을 참조하던 자식 테이블 레코드의 외래 키 열을 NULL로 설정하는 방식입니다. 이 경우 자식 테이블의 레코드 자체는 유지되지만, 더 이상 부모 레코드와 연결되지 않습니다. 단, 이 옵션을 적용하려면 해당 외래 키 열이 NULL 값을 허용하도록 정의되어 있어야 합니다.

두 방식의 선택 기준

CASCADE는 자식 데이터가 부모 데이터 없이는 의미가 없는 경우(예: 주문 상세 내역)에 적합하고, SET NULL은 자식 레코드를 보존해야 하면서 부모와의 관계만 해제하고 싶은 경우에 유용합니다. 데이터베이스 설계 시 비즈니스 요구 사항에 따라 적절한 옵션을 선택하는 것이 중요합니다.