728x90

 

대규모 AI 시스템 설계 프로젝트를 새롭게 시작하면서 ERD(Entity-Relationship Diagram)를 설계하는 과정에서 DB 순환 참조 문제에 직면했습니다. 본 TIL에서는 이 문제를 어떻게 해결했는지에 대해 정리하고자 합니다.

 

순환 참조란❓

DB 순환 참조는 데이터베이스에서 두 개 이상의 테이블서로를 참조하고 있을 때 발생하는 상황을 말합니다. 이를 테이블 A, B, C를 사용하여 설명하면 다음과 같습니다.

  1. 테이블 A테이블 B를 참조합니다.
  2. 테이블 B테이블 C를 참조합니다.
  3. 테이블 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를 참조합니다.

이러한 참조 관계에서는 ProductCompanyHubProduct순환 참조가 발생할 수 있습니다. 각 테이블이 다른 테이블을 참조하여 순환 구조를 형성하고 있기 때문입니다.

 

순환 참조 해결

 

따라서 Product 테이블에서 Hub 테이블hub_id를 참조하는 FK를 제거하여 순환참조를 없애야합니다.

 

최종적으로 ProductCompanyHub의 단방향 참조 관계가 됩니다.