작성
·
13
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님, 순환 외래키 제약 조건 문제는 테이블이 서로 참조하고 있어 발생하는 복잡한 상황입니다. 이 문제를 해결하기 위한 방법을 아래에 제안합니다.
고리 끊기: 순환 참조를 피하기 위해 특정 테이블의 외래키 제약 조건을 제거하거나, 고리를 끊어야 합니다. 예를 들어, 학생이 교사를 직접 참조하지 않게 하고 대신 관리용 리스트는 별도의 시스템에서 유지하는 방법을 고려할 수 있습니다.
소프트 삭제: 외래키 제약 조건이 문제라면 소프트 삭제를 적용하여 실제로는 삭제하지 않고 삭제된 상태로 표시하는 방법이 있습니다. 데이터 무결성이 더 중시될 때 유용합니다.
중재 테이블 활용: 추가적인 중재 테이블을 도입하여 순환 구조를 피할 수 있습니다. 예를 들어 ‘학생-교사 관계’라는 중재 테이블을 두어 직접적인 순환 외래키를 피하도록 설계할 수 있습니다.
삭제 순서 관리: 하위 객체부터 상위 객체 순으로 삭제하여 외래키 제약 조건 위반을 회피할 수 있습니다. 삭제를 위한 특정 트랜잭션 로직을 설계하는 방식입니다.
순환 외래키 문제는 구조적인 설계 측면에서 많은 고려가 필요하며, 각각의 상황에 맞는 해결책을 찾아야 합니다.
이와 관련하여 도움이 될 수 있는 유사한 주제를 다룬 링크들을 소개해 드립니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.