순환 외래키 제약조건(A→B→C→A)으로 인해 삭제가 불가능할 때 해결 방법이 궁금합니다
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님, 순환 외래키 제약 조건 문제는 테이블이 서로 참조하고 있어 발생하는 복잡한 상황입니다. 이 문제를 해결하기 위한 방법을 아래에 제안합니다.
고리 끊기: 순환 참조를 피하기 위해 특정 테이블의 외래키 제약 조건을 제거하거나, 고리를 끊어야 합니다. 예를 들어, 학생이 교사를 직접 참조하지 않게 하고 대신 관리용 리스트는 별도의 시스템에서 유지하는 방법을 고려할 수 있습니다.
소프트 삭제: 외래키 제약 조건이 문제라면 소프트 삭제를 적용하여 실제로는 삭제하지 않고 삭제된 상태로 표시하는 방법이 있습니다. 데이터 무결성이 더 중시될 때 유용합니다.
중재 테이블 활용: 추가적인 중재 테이블을 도입하여 순환 구조를 피할 수 있습니다. 예를 들어 ‘학생-교사 관계’라는 중재 테이블을 두어 직접적인 순환 외래키를 피하도록 설계할 수 있습니다.
삭제 순서 관리: 하위 객체부터 상위 객체 순으로 삭제하여 외래키 제약 조건 위반을 회피할 수 있습니다. 삭제를 위한 특정 트랜잭션 로직을 설계하는 방식입니다.
순환 외래키 문제는 구조적인 설계 측면에서 많은 고려가 필요하며, 각각의 상황에 맞는 해결책을 찾아야 합니다.
이와 관련하여 도움이 될 수 있는 유사한 주제를 다룬 링크들을 소개해 드립니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
아주 작은 정오표 전달드립니다.
0
52
2
실제로 작은 기업에서 기획 롤
1
27
1
order_product 까마귀발
0
44
2
[DB설계] 탈퇴 유저의 구독 정보 유지 및 이메일 마스킹 관련 질문입니다.
0
53
1
자연키 vs 대리키 실무질문
0
28
1
1:N 관계에서 중간테이블 (연관엔티티)
0
57
2
일대일 fk 위치
0
43
1
제 3 정규형 vs BCNF 정규형 차이점?
0
106
3
BCNF 질문
0
78
2
연관 엔티티 네이밍 규칙
0
54
1
진짜 강의 듣는거 너무 고문
0
140
1
28강 sql 파일 어딨나여?
0
94
1
2NF의 엄밀한 정의
0
74
1
comment 채번을 사용해야 하는 이유에 대한 설명이 필요합니다.
0
124
3
학습중인 수업자료를 받아볼 수 있을까요??
0
103
2
수업자료 pdf파일관련 건의 - 제목 링크위치 개선
0
88
2
서비스 운영 중 잘못된 테이블 설계 발견시 수정 시점에 대한 질문
1
108
2
실무적인 설계로 접근했을 때 제 2정규형 항상 만족?
0
82
1
슈퍼/서브 타입 joined 전략
0
74
2
created_at 관련 구현과 DB ENUM에 대해
0
75
1
M:N 관계의 연관 엔티티 설계 순서
0
81
2
데이터 역사성 훼손 문제
0
67
2
실무팁 - 등록자,수정자 컬럼 관리 관련 질문입니다.
0
84
1
구글이 이메일 변경을 허용하는 이유
0
126
1





