이제 정말 DBMS 에서 중요한 내용인 관계에 대해서 확인해보자~.
관계는 사전적으로 정의하면 ' 상호 연관성이 있는 상태' 즉 어떤 테이블과 어떤 테이블이 서로 관계가 있어 연결된 상태이다.
아까 살펴본 대로, 1:다 / 1:1 / 다:1 / 다:다 등 다양한 관계가 존재하였다.
이 관계를 현상적으로 본다면, 부모의 식별자를 자식에게 상속시키는 행위다. 부모의 식별자를 이제 자식의 일반속성으로 상속하면 비식별관계라고 우리가 칭하였다.!
- 즉 관계를 맺는다는 건 식별자를 상속하고 상속된 속성을 매핑키로 사용하는 것 !
- 우리는 이 관계를 JOIN이라는 옵션을 통해서 수행될 수 있는 것이다.
위처럼 고객테이블이 부모테이블이 되고 주문테이블이 자식 테이블이 되어 해당 고객테이블의 고객번호가 주문테이블의 일반속성 즉 FK 로 들어간 것을 확인해볼 수 있다.
따라서 여기서의 JOIN KEY 는 바로 " 고객 번호 " 라는 거
join 문의 예시
SELECT B.고객명
FROM 주문 A, 고객 B
WHERE A.주문번호 ='110001'
AND A.고객번호 = B.고객번호
여기까지 알아봤으니 지금까지는 일반적인 모델에 대한 예시를 알아봤다. 지금부터는 다양한 모델 관계에 대해서 알아보도록 하자.
* 계층형 데이터 모델
- 이 모델은 두 엔터티 간의 관계가 아니라 자기 자신에게 관계가 발생하는 경우이다. 이는 말 그대로 계층구조를 가진 데이터를 지칭하는 것이다. 정말 우리가 사원테이블을 봤을 때 상위자의 FK 의 경우는 물고 또 물려 있는 경우이므로 이럴 경우 계층형 데이터 모델이라고 볼 수 있겠다.
이런식으로 약간 꼬리를 무는 테이블 형태로가지고 가게 된다.
SELECT B.사원명
FROM 사원테이블 A, 사원테이블 B
WHERE A.사원명 ='임선호'
AND A.상위자 = B.사원명
* 상호배타적 관계
상호 배타적 관계는 약간 서로 침범할 수 없는 관계와 같다. 예를 들면 개인고객과 법인고객 과 같은 예시가 그럴 수 있다. 개인고객이자 법인고객일 수가 없으므로 이는 상호 배타적인 관계이다.
이럴 경우에 join 케이스는 어떻게 되어야 할까?
SELECT B.개인고객명
FROM 주문 A, 개인고객 B
WHERE A. 주문번호 = 110001
AND A. 고객구분코드 = '01'
AND A.개인/법인번호 = B.개인번호
UNION ALL
SELECT B.법인고객명
FROM 주문 A, 법인고객 B
WHERE A. 주문번호 = 110001
AND A. 고객구분코드 = '02'
AND A.개인/법인번호 = B.법인번호
혹은 이거 말고도 outer join 을 이용해서 보일 수도 있다.
'이유's Programming > DBMS' 카테고리의 다른 글
[ 3 -1 ] DBMS 내장 함수 (0) | 2021.03.19 |
---|---|
[ 식별자 ] 본질식별자와 인조식별자 (0) | 2021.03.18 |
2-2. 정규화 ( 제 3 정규형, 반정규화와 성능 ) (0) | 2021.03.15 |
2-1. 정규화 ( 제 1 정규형, 제 2 정규형 ) (0) | 2021.03.08 |
1-4. 관계, 식별자 (0) | 2021.03.05 |