지지 On Air

1-2-2. 관계와 조인의 이해 [ SQLD / SQLP / SQL 가이드 ] 본문

개발/SQL [SQLD&SQLP]

1-2-2. 관계와 조인의 이해 [ SQLD / SQLP / SQL 가이드 ]

슈스 지지 2022. 7. 12. 22:59
반응형


지난 포스팅 '정규화'에서도 '조인'이라는 용어가 등장했습니다.
이번 포스팅에서 '조인'의 개념에 대해 조금 더 자세히 다뤄보겠습니다 :)


과목 I. 데이터 모델링의 이해
- 제2장 데이터 모델과 SQL
> 제2절 관계와 조인의 이해

관계 (Relaionship)는 사전적으로 정의하면 '상호 연관성이 있는 상태'이다.
관계를 맺는 것은 부모의 식별자를 자식에게 상속시키는 행위이다.이때 부모의 식별자를 자식의 식별자에 포함하면 '식별관계', 부모의 식별자를 자식의 일반속성으로 상속하면 '비식별관계'라고 하였다. 즉, 관계를 맺는다는 건 식별자를 상속하고, 상속된 속성을 매핑키로 활용하여 데이터를 결합해 볼 수 있다는 의미다. 이를 SQL에서는 조인(Join)이라고 한다.

1. 조인 (Join)

위의 모델은 '고객' 엔터티와 '주문' 엔터티가 관계를 맺고 있는 모습이다.
고객 엔터티의 입장에서는 '한 명의 고객은 여러 번 주문할 수 있다', 주문 엔터티의 입장에서는 '각각의 주문은 반드시 한 명의 고객에 의해 발생된다' 정도로 이해할 수 있다.
관계를 맺음으로 생기는 현상은 고객 엔터티의 식별자인 '고객번호'를 주문 엔터티에 상속시킨 것이다.
즉 관계란, 식별자를 상속시키고 해당 식별자를 매핑키로 활용해 데이터를 결합하는 것이다.

고객 데이터와 주문 데이터가 다음과 같다고 생각해보자.

주문데이터의 '고객' 데이터에서 고객번호를 상속시킨 것을 볼 수 있다.
주문번호가 'A10001'인 주문의 이름은 누구일까?
1. 주문 데이터에서 주문번호가 'A10001'인 데이터를 찾는다.
2. 주문번호가 'A10001'인 데이터 행에서 고객번호가 '1001'인것을 확인한다.
3. 고객 데이터에서 고객번호가 '1001'인 데이터를 찾는다.
4. 고객번호가 '1001인 데이터의 행에서 이름이 '김철수' 인것을 알 수 있다.
이것이 바로 관계를 활용한 조인이다.
2,3번의 과정이 '조인'이고, 고객번호가 바로 조인키(Join Key)이다.

2. 계층형 데이터 모델

계층형 데이터 모델을 이해하기 위해 다음 데이터를 확인해보자.

위의 표에서 주목해볼 속성은 '담당관리자' 이다. 담당관리자는 각 사원 관리자의 사원번호를 의미한다.
즉, 'SCOTT'의 관리자는 사원번호가 1005인 'FORD'가 된다. 'FORD'의 관리자는 사원번호가 1006인 'TOMMY'가 된다.
이렇게 관리자를 찾아가는 과정 또한 앞에서 언급한 '조인' 이다.
이전과 다른점은 자기 자신을 조인했다는 것이다. 이것을 셀프조인(Self-Join)이라고 한다.
아래와 같이 자기 자신에서 관계를 맺는다.

관계를 맺으면 식별자를 상속한다고 했다. 본 모델에서 상속된 식별자가 바로 담당관리자 이다. 속성명만 다를 뿐 '담당관리자'속성에는 '사원번호'가 들어간다. 이를 매핑키로 활용하여 조인하는 것이다.
이와같이, 데이터간의 계층이 존재할 때 발생하는 모델이 '계층형 데이터 모델'이다. 좀더 직관적으로 표현하자면 아래와 같다.

 

3. 상호배타적 관계

상호 배타적(Exclusive-OR) 관계는 개념정도는 숙지하고 있어야 한다.

주문 엔터티에는 개인 또는 법인번호 둘 중 하나만 상속될 수 있음을 의미한다.


이번 절에서는 관계와 조인에 대해 쉽게 설명했습니다.
개념만 숙지하고 계신다면 문제푸는데 큰 어려움은 없을 것 같습니다 :)


본 포스팅은 '한국데이터산업진흥원' 에서 발행한 'SQL 전문가 가이드' 를 참고/인용 하였음을 밝힙니다.
반응형
Comments