728x90
대규모 AI 시스템 설계 프로젝트를 새롭게 시작하면서 ERD(Entity-Relationship Diagram)를 설계하는 과정에서 DB 순환 참조 문제에 직면했습니다. 본 TIL에서는 이 문제를 어떻게 해결했는지에 대해 정리하고자 합니다.
순환 참조란❓
DB 순환 참조는 데이터베이스에서 두 개 이상의 테이블이 서로를 참조하고 있을 때 발생하는 상황을 말합니다. 이를 테이블 A, B, C를 사용하여 설명하면 다음과 같습니다.
- 테이블 A가 테이블 B를 참조합니다.
- 테이블 B가 테이블 C를 참조합니다.
- 테이블 C가 다시 테이블 A를 참조하는 경우, 순환 참조가 발생합니다.
이 구조를 시각적으로 표현하면 다음과 같습니다:
- 테이블 A → 테이블 B → 테이블 C → 테이블 A
순환참조의 문제점
- 무한 루프
- 순환 참조로 인해 데이터 삽입이나 삭제 시 무한 루프가 발생할 수 있습니다.
- 데이터 무결성 문제
- 순환 참조는 데이터
무결성을 유지하기 어렵게 만들어,외래 키 제약 조건을 만족하기 어려운 상황이 발생할 수 있습니다.
- 순환 참조는 데이터
- 성능 문제
- 순환 참조는 데이터베이스 성능에 악영향을 미칠 수 있으며, 쿼리 성능 저하와 같은 문제를 일으킬 수 있습니다.
순환참조 해결
순환 참조 발생
대규모 AI 시스템 설계 프로젝트를 새롭게 시작하면서 ERD(Entity-Relationship Diagram)를 설계하는 과정에서 DB 순환 참조 문제에 직면했습니다.
- Product 테이블의 company_id는 Company 테이블의 company_id를 참조합니다.
- Product 테이블의 hub_id는 Hub 테이블의 hub_id를 참조합니다.
- Company 테이블의 managing_hub_id는 Hub 테이블의 hub_id를 참조합니다.
- Company 테이블의 product_id는 Product 테이블의 product_id를 참조합니다.
- Hub 테이블의 managed_company_id는 Company 테이블의 company_id를 참조합니다.
- Hub 테이블의 product_id는 Product 테이블의 product_id를 참조합니다.
이러한 참조 관계에서는 Product → Company → Hub → Product의 순환 참조가 발생할 수 있습니다. 각 테이블이 다른 테이블을 참조하여 순환 구조를 형성하고 있기 때문입니다.
순환 참조 해결
따라서 Product 테이블에서 Hub 테이블의 hub_id를 참조하는 FK를 제거하여 순환참조를 없애야합니다.
최종적으로 Product → Company → Hub의 단방향 참조 관계가 됩니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.09.08 - 인적 오류로 인한 .idea 폴더 커밋 문제 해결: .gitignore 설정의 중요성 (0) | 2024.09.08 |
---|---|
[TIL, 일일 회고] 2024.09.07 - Spring Cloud Config 구축 테스트 (1) | 2024.09.07 |
[TIL, 일일 회고] 2024.09.05 - 위도와 경도의 데이터 타입과 길이 (0) | 2024.09.05 |
[TIL, 일일 회고] 2024.09.04 - Spring 심화 AI 비즈니스 검증 프로젝트 트러블 슈팅 (0) | 2024.09.04 |
[TIL, 일일 회고] 2024.09.03 - Pageable로 페이징 및 정렬 간소화하기 (0) | 2024.09.03 |