본문 바로가기
데이터베이스(DB)/SQLD

[SQLD 1-2-2] 데이터 모델과 SQL - 관계와 조인의 이해

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

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. 상호배타적 관계

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


출저 : SQL 전문가 가이드

 

728x90