자기참조관계, 순환관계(Recursive Relationship)

    순환관계, 자기참조관계의 개념

    가. 순환관계(Recursive Relationship)의 정의

    - 하나의 엔터티(Entity)가 다른 엔터티가 아닌 자기 자신과 관계를 맺는 타입으로 순환관계 혹은 자기참조관계라 불린다.

    - 동일 Entity 타입 내에서 자기가 자기의 인스턴스를 참조하는 구조, 대표적으로 조직을 표현할 때 자주 사용


    동일한 Entity타입의 Entity들이 상호간에 계층적으로 데이터가 구성되는 관계



    나. 자기 엔터티타입을 참조하는 구성방법에 따른 유형

    • 복합형(다중Entity) : 동일한 PK를 가진 테이블을 별도로 분리
    • 통합형(단일Entity) : Entity타입 내에서 자기자신을 참조

      

    다. 복합형(다중Entity)로 구성 시 자기참조관계의 단점



    - 추가적인 관계 발생이나 변경 시 새로운 엔터티 타입을 추가 해야 함

    - 기존 SQL 소스 코드의 수정이 필요하여 추가 개발 공수 필요



    순환관계의 관계유형에 따른 종류

    1:1 자기참조관계

    - 사건번호 하나에 자사건 번호가 한 개만 올 수 있는 경우

    - 예 : 관련사건, 관련계좌 등



    1:M 자기참조관계

    - 상위 조직 하나에 여러 개의 하위조직(1:M)이 올 수 있고 다시 하위 조직 하나는 그 하위 조직 여러 개를 거느리는 경우

    - 예 : 조직, 게시판의 Q&A, 통합메뉴, BOM



    M:N 자기참조관계

    - 부품 1은 상위부품으로 2도 구성할 수 있고 4도 구성할 수 있음. 이럴 경우 관계의 표현이M:N 표현되어 모델링 됨

    - 예 : BOM, 관련계좌 등



    M:N 자기참조관계(BOM) 모형 해결방법

    - 실제 물리적 구현이 불가능하므로 관계Entity를 이용 관계해소 방법적용처리


    - 위와 같이 두 개의 엔터티로 분리하고, 부품간의 관계를 설정하는 관계를 저장하는 테이블을 설계하여 M:N 관계를 해소할 수 있음


    장점 

    - 관계 Entity를 이용하여 M:N 관계를 해소가능

    단점

    - 두 개의Entity 타입을 항상 조인 필요 (쿼리작성 복잡)

    방안 

    - 가급적 1:M관계로 만들도록 조정처리(유지보수와 성능관점)

    - 신규코드를 만들거나 업무규칙을 변경하여 개선유도


    자기참조관계(BOM)의 구성간 고려사항

    관계의 연결 속성에 인덱스 설정

    - 참조 데이터 조회 시 인덱스 없을 시 Full Scan 발생  성능저하 발생

    - 연결 속성의 컬럼에 대해 인덱스를 설정하여 Full Table Scan 예방


    자기참조관계에 적절한 SQL문장을 실행

    - 데이터 조회 시 연결된 데이터가 함께 조회되도록 SQL문장 구현필요

    - 오라클의 경우 자기참조관계 관련 이용함수 제공 (Start With, Connect By)



    참고자료


    댓글

    Designed by JB FACTORY