게시판
      
상위분류 : 잡필방 중위분류 : 서류가방 하위분류 : 전산과 컴퓨터
작성자 : 문시형 작성일 : 2015-01-13 조회수 : 3,166
제 목 : 권순용의 DB 이야기

권순용의 DB 이야기

1:1 관계와 순환 전개



 

관계는 데이터베이스의 모델을 분석함에 있어 매우 중요한 요소다. 관계는 모델 간 데이터의 관련성을 의미하는 데 그 종류와 형태가 다양하다. 그리고 모든 데이터는 관계에 의해 구성될 수 있다.



 

이 글에서는 관계 중에서도 1:1 관계 및 순화 전개의 처리에 대해 살펴본다. 1:1 관계는 하나의 테이블을 수직 분할한 경우가 대부분이기 때문에 처리 방식에 대한 많은 분석이 필요하다. 또한 순환 전개는 특수한 모델이기 때문에 모델 구성 시 유용하게 활용할 수 있다.



 

1:1 관계 유지 또는 통합

1:1 관계는 무조건 통합해야만 할까? 조인이 매우 자주 발생하지 않으면 통합하지 않는 것이 더 유리하다. 대신 이 경우 데이터 정합성 유지는 어려워진다. 이를 모두 고려해 1:1 관계에 대한 통합 또는 유지를 결정해야 한다.

- 조인 수행 빈도
- 데이터 정합성

1:1 관계 통합일 경우 구분 속성이 굳이 필요 없다. 이는 Subset에 대한 통합이 아니며 단지 수직 분할한 엔티티에 대한 통합이 때문에 단순 통합에 해당한다.



<그림 1> 1:1 관계 유지



<그림 2> 1:1 관계 통합



<그림 3> 1:1 관계 통합(Subset)


이와 반대로 Subset 통합인 경우에는 구분 속성이 필요하다. Subset 통합 시 법인계좌, 개인계좌의 예처럼 2개의 Subset의 교집합이 없는 경우 구분 속성 값이 2개면 된다.

그러나 개그맨 집합, MC 집합, 영화배우 집합 등 교집합이 존재하는 경우 구분 속성 값이 7개여야 한다. 예컨대 연예인에 대한 Subset으로는 (개그맨), (개그맨, MC), (개그맨, 영화배우), (MC, 영화배우), (MC), (영화배우), (개그맨, MC, 영화배우)가 있다. 만약 통합 엔티티면 Union all로 수행해 조회하지 않아도 돼 중복된 데이터를 제거할 수 있다.



 

순환 전개


<그림 4> 순환 전개를 이용하지 않는 경우



<그림 5> 순환 전개를 이용하는 경우


 

순환 전개란 자기 자신과 관계를 맺는 것을 의미한다. 순환 전개를 이용하지 않는 경우 일반적으로 Where 조건에 함수를 사용하게 된다. 이때에는 인덱스를 사용할 수 없어 Full Table Scan으로만 수행 가능해 성능 저하가 발생하게 된다. 순환 전개를 구성함에 있어 다음과 같은 사항을 고려해야 한다.

- 부모 또는 자식 키를 입력할 수 있는 속성이 필요함
- 애플리케이션 구현 시 사용하는 SQL 구문 및 필요한 인덱스(가정: 분포도는 col5, col4 가 좋음)



 

 

<리스트 1> 순환전개 SQL 예 Select * From TAB Where col3=‘100’ and col 5 between ‘…’ and ‘…’ Connect by Prior col1=col2(부모키) Start with col1=‘A’ and col4 like ‘1%’ e 순환전개의 시작점

<리스트 1>에서 필요한 Index는 col2 또는 col2_col4 인덱스다. 여기서 Connect by 절은 루프로 수행되므로 부모를 찾을 때까지 반복해서 엑세스하게 된다. 그렇기 때문에 시작점을 빨리 찾기 위해서는 이 2개의 인덱스가 필수적이다. 또한 전개 완료 후 Where 조건은 필터 처리가 되므로 Where 조건에 있는 컬럼에 대한 인덱스가 없어도 성능에 영향이 없다. 순환전개는 이러한 점을 고려해 모델을 수행해야 함을 잊지 말자.

 

| | 목록으로