인프런 커뮤니티 질문&답변
순환 외래키 제약조건(A→B→C→A)으로 인해 삭제가 불가능할 때 해결 방법이 궁금합니다
해결된 질문
작성
·
79
0
A, B, C 이렇게 세 개의 테이블이 있는데요,
A → B, B → C, C → A 이렇게 서로 참조하고 있는 구조입니다.
문제는 이렇게 되어 있으니까,
예를 들어 B를 지우려면 A가 걸리고,
A를 지우려면 또 C가 걸리고,
C를 지우려면 다시 A가 걸려서
결국 서로 물려서 삭제가 안 되는 상황이 생깁니다.
예를 들면
A = 학생(Student) → 어떤 수업(B) 에 참여하고,
B = 수업(Class) → 그 수업은 교사(C) 가 담당하며,
C = 교사(Teacher) → 교사는 자신이 가르치는 학생(A) 들의 리스트를 참조(관리용).
이 예시는 정확한 상황은 아니고 제가 생각해서 만들어낸 예시입니다 조금 안맞을수 있는데 만약에 이런 경우에 보통 어떻게 처리해야하나요?
퀴즈
데이터베이스 설계가 소프트웨어 개발에서 가장 중요한 요소로 간주되는 주된 이유는 무엇일까요?
개발 언어 선택에 영향을 주어서
애플리케이션 코드의 기반이 되어서
초기 개발 비용을 절감해서
디버깅 시간을 단축해서
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. Neon님, 순환 외래키 제약 조건 문제는 테이블이 서로 참조하고 있어 발생하는 복잡한 상황입니다. 이 문제를 해결하기 위한 방법을 아래에 제안합니다.
고리 끊기: 순환 참조를 피하기 위해 특정 테이블의 외래키 제약 조건을 제거하거나, 고리를 끊어야 합니다. 예를 들어, 학생이 교사를 직접 참조하지 않게 하고 대신 관리용 리스트는 별도의 시스템에서 유지하는 방법을 고려할 수 있습니다.
소프트 삭제: 외래키 제약 조건이 문제라면 소프트 삭제를 적용하여 실제로는 삭제하지 않고 삭제된 상태로 표시하는 방법이 있습니다. 데이터 무결성이 더 중시될 때 유용합니다.
중재 테이블 활용: 추가적인 중재 테이블을 도입하여 순환 구조를 피할 수 있습니다. 예를 들어 ‘학생-교사 관계’라는 중재 테이블을 두어 직접적인 순환 외래키를 피하도록 설계할 수 있습니다.
삭제 순서 관리: 하위 객체부터 상위 객체 순으로 삭제하여 외래키 제약 조건 위반을 회피할 수 있습니다. 삭제를 위한 특정 트랜잭션 로직을 설계하는 방식입니다.
순환 외래키 문제는 구조적인 설계 측면에서 많은 고려가 필요하며, 각각의 상황에 맞는 해결책을 찾아야 합니다.
이와 관련하여 도움이 될 수 있는 유사한 주제를 다룬 링크들을 소개해 드립니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




