자기참조관계, 순환관계(Recursive Relationship)
- 정보처리기술사/데이터베이스
- 2020. 3. 24.
순환관계, 자기참조관계의 개념
가. 순환관계(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)
참고자료
'정보처리기술사 > 데이터베이스' 카테고리의 다른 글
DB 무결성 확보를 위한, 동시성 제어(Concurrency control) (0) | 2020.10.07 |
---|---|
DB의 분산처리 기법, 샤드(Shard), 샤딩(Sharding) (0) | 2020.08.14 |
NoSQL과 NoSQL의 종류들 (0) | 2019.11.18 |
데이터 독립성(Data Independence) (0) | 2018.11.24 |
Nested Loop, Sort-Merge, Hash Join 조인연산 (0) | 2016.11.06 |