파이썬 문법만 100일째 공부중인 IT초보의 페이지 자세히보기

Lv02. 디비~DB~딥!/1. SQLD : 데이터모델링의 이해

7. 관계(Relationship)

오늘도레벨1 2023. 5. 5. 12:34
728x90
SMALL

 

안녕하세요 :0

오늘도레벨1입니다.

 

 

어린이날인데

날이 이렇게 우중충할 수 없네요.

비도 왔다 안왔다하니 연휴 계획을

외부로 잡으신 분들께는 심심한

위로의 말씀을 전합니다.. ㅠ

 

그래도 디비디비딥 SQLD는

쉬지않고 계속나아가야겠죠?

 

지난 시간에는 속성에 대해

학습해 보았습니다.

 

내용이 기억이 나지 않는 분은

아래의 링크를 참고해주세요!

 

 

 

6. 속성(Attribute)

안녕하세요 :0 오늘도레벨1입니다. 벌써 한주의 절반입니다. 이번주는 금요일부터 연휴가 시작되는데 휴일 계획은 세우셨을지요 ㅎㅎ 지난 포스팅에서는 엔터티에 대해서 알아보았습니다. 아직

seung9-it.tistory.com

 

 

자, 그럼 본격적으로

이번 포스팅도 시작해볼까요?

 

 

이번 포스팅에서 다루어볼 내용은

바로바로~ 관계(Relationship)입니다.

 

우선...!

데이터 모델링에서 관계란 무엇일까요?

다음과 같이 정의 가능합니다.

 

"엔터티의 인스턴스 사이의 논리적인

연관성으로서 존재의 형태로서나

행위로서 서로에게 연관성이 부여된 상태"

 

쉽게 이해가 안가실 것 같은데요.

아래의 예시 그림을 보시죠!

 

 

관계의 정의 (출처: 한국데이터산업진흥원)

 

강사(엔터티)가 수강생(엔터티)을

가르치는 상태인 이 행위로서 연관성이 부여된

자체를 관계라고 할 수 있습니다.

 

이해가 가시죠?

 

가령, 고객이 주문한다.

직원은 부서에 속한다.

등등의 예시도 들어볼 수 있습니다.

 

이러한 관계에서는

패어링(Paring)이라는 개념이

매우 중요합니다.

 

관계의 패어링이란

엔터티 내 각 인스턴스들이

개별적으로 관계를 가지는 것을

개별적 개념의 관계 패어링이라고 합니다.

 

또한, 관계 패어링의 집합이 바로

집합적 개념의 관계 패어링이라고 합니다.

 

따라서, 개별 인스턴스가 각각 다른

종류의 관계를 가지고 있다면 두 엔터티

사이에 두 개 이상의 관계가 형성될 수도 있죠.

 

 

관계의 패어링 (출처: 한국데이터산업진흥원)

 

 

위의 예시 그림을 살펴보면

강사인 정성철은이춘식과 황종하에게

강의를 하는 형태로 되어 있습니다.

 

또한, 조시형은 황종하에게

강의를 하는 형태로 관계가 표현되어 있죠.

 

이와 같이 엔터티 내에 인스턴스와

인스턴스 사이에 관계가 설정되어 있는

어커런스를 관계 패어링이라고 하는 것입니다.

 

다시 정리하면, 엔터티는

인스턴스의 집합을 논리적으로 표현하고

관계는 관계 패어링의 집합을 논리적으로

표현한 것이다라고 설명할 수 있습니다.

 

 

 

 

그렇다면 이러한 관계는

어떻게 분류를 하게 될까요?

 

바로 관계를 연결함에 있어

어떤 목적으로 연결되었는냐에

따라서 분류하는데요.

 

이를 "존재에 의한 관계"와

"행위에 의한 관계"로

구분 될 수 있음을 의미하죠.

 

아래의 그림 예시를 보시면

이해가 더 쉬울 것입니다.

 

 

관계의 분류 (출처: 한국데이터산업진흥원)

 

 

왼쪽의 모델부터 보시면

황경빈이란 사원이 DB팀에 소속되어

있는 상태를 나타내고 있습니다.

 

즉, '소속된다'라는 의미는

행위에 따른 이벤트에 의해 발생된게 아닌

그냥 황경빈 사원이 DB팀에 소속되어 있어

존재 자체로 나타나는 것이죠.

 

그럼 오른쪽 모델은 어떤가요?

김경재 고객은 '주문한다'라는 행위를 하여

CTA201이라는 주문번호를 생성시켰습니다.

 

즉, 주문 엔터티의 CTA201 주문번호는

김경재 고객이 '주문한다'라는 행위에 의해

발생되었기 때문에 행위에 의한 관계가 되는 것입니다.

 

 

이러한 관계의 표기법은

상당히 복잡하고 여러가지

의미를 가지고 있습니다.

 

따라서, 다음 3가지의

개념과 함께 표기법을

이해해야 합니다.

 

1) 관계명(membership): 관계의 이름

2) 관계차수(Cardinality): 1:1, 1:M, M:N

3) 관계선택사양(Optionality): 필수관계, 선택관계

 

그럼 각각의 개념을

하나씩 살펴보도록 하겠습니다.

 

첫 번째로 관계명입니다.

관계명은 엔터티가 관계에 참여하는

형태를 지칭하는 것인데요.

 

각각의 관계는 두 개의 관계명을

가지고 있고, 각각의 관계명에 의해

두 가지의 관점으로 표현될 수 있습니다.

 

아래의 예시 그림을 보시면

쉽게 이해가 가능하실 것 같네요.

 

 

관계의 관계명 (출처: 한국데이터산업진흥원)

 

또한, 엔터티에서 관계가 시작되는 편을

관계시작점(The Beginning)이라고 부르며

받는 편을 관계끝점(The End)라고 부릅니다.

 

그리고 관계 시작점과 끝점 모두

관계이름을 가져야하며 참여자의

관점에 따라 관계이름이 능동적(Active)

or 수동적(Passive로 명명되죠!

 

이러한 관계명은 다음과 같은

명명규칙이 있는데요.

 

우선 애매한 동사를 피해야 합니다.

예를 들어, "관계된다", "관련이 있다"

처럼 "이다", "한다" 등은 그 행위가 구체적이지

않아 두 참여자간 어떤 상태가 존재하는지

파악하기 어렵습니다.

 

그리고 현재형으로 표현해야합니다.

예를 들면 "수강을 신청했다", "강의를 할 것이다"

와 같이 표현하면 안되며 "수강 신청한다",

"강의를 한다"로 표현하는게 올바른 명명법이죠.

 

 

두 번째, 관계차수입니다.

 

두 엔터티간 관계에서 참여자의 수를

표현하는 것을 관계차수라고 하는데요.

 

가장 일반적인 관계차수 표현방법은

1:1, 1:M, M:N입니다.

 

이때, 가장 중요하게 고려해야 하는

사항은 한 개의 관계가 존재하느냐

아니면 두 개 이상의 관계명이 존재하는지를

파악하는 것이 매우 중요합니다.

 

이러한 관계차수를 표시하는 방법이

여러가지가 있지만 대표적인

IE 표기법 / Barker 표기법에 대해서

그 차이를 알아두는 것만으로도 SQLD의

자격 준비를 위해서는 충분할 것 같네요.

 

아래의 예시를 통해서 각각의

관계 차수 표기법이 어떻게 다른지

유의 깊에 살펴보시면 좋겠습니다.

 

가장 큰 차이는 실선과 점선의 차이인데

3가지 관계차수 경우에 대해서

직접 손으로 ERD를 그려보면 쉽게

금방 적응하실 것 같습니다.

 

 

1:1 관계차수 표기법 (출처: 한국데이터산업진흥원)
1:M 관계차수 표기법 (출처: 한국데이터산업진흥원)
M:N 관계차수 표기법 (출처: 한국데이터산업진흥원)

 

 

어떻게, 잘 따라오고 있으신지요?

내용이 어렵지 않으실거라 생각이 듭니다.

 

그럼 이어서!

세 번째로, 관계선택사양입니다.

 

관계선택사양은 두가지로

구분해서 보시면 되는데요.

 

바로바로~!

필수적인 연결관계인 필수참여관계와

선택적인 연결관계인 선택참여관계입니다.

 

두 가지가 어떻게 다른지는 그럼

예시를 통해서 볼까요?

 

필수참여관계의 예시입니다.

"반드시 지하철 문이 닫혀야만

지하철은 출발한다"라는

예시를 통해 설명가능한데요.

 

만약, 지하철 문이 닫히지 않고

열차가 출발하면 아주아주

잔혹하고 끔찍한 일이 발생하겠죠?

따라서 "지하철 문"과 "지하철 출발"은

필수적으로 연결되어야 하며 이를

데이터모델링에서 필수참여관계에

비유할 수 있는 것입니다.

 

그럼 선택참여관계 예시는

무엇이 있을까요?

 

바로 "지하철 내부 방송은

언제든지 할 수 있다"로 예시를 들 수 있습니다.

 

지하철의 출발을 알리는 안내방송은

지하철의 출발과 상관없이 방송해도

아무런 문제가 발생하지 않습니다.

 

물론, 방송을 정해진 시간에 하면

승객들에게 정보로써는 유익하지만

꼭 필수적인 것은 아닐 수 있다는 것이죠.

따라서 "지하철 내부 방송"과 "지하철 출발"은

이때 선택적인 관계라고 정의할 수 있고

이는 데이터모델링에서 선택참여관계로

비유할 수 있답니다.

 

다른 예시를 더 알아볼까요?

필수참여는 참여하는 모든 참여자가

반드시 관계를 가지는, 타 엔터티의 참여자와

연결이 되어야 하는 관계이죠.

 

예를 들어, 주문서는 반드시

주문목록을 가져야 하며 주문목록이 없는

주문서는 의미가 없으므로 주문서와

주문목록은 필수참여관계가 됩니다.

 

반대로 목록은 주문이 될 수도

주문되지 않은 목록일 수도 있으므로

목록과 주문목록과의 관계는

선택참여관계가 됩니다.

 

이러한 선택참여관계는 ERD에서

관계를 나타내는 선에서 선택참여하는

엔터티 쪽을 원으로 표시합니다.

그리고 필수참여는 아무 표지 않죠!

 

만약, 관계가 표시된 양쪽 엔터티에

모두 선택참여가 표시된다면 이것은

0:0(Zero to Zero)관계로 문제가 있는 것이니

관계설정에 대해 점검이 필요합니다.

 

마찬가지로 ERD 예시를 첨부드리니

IE / Barker 표기법은 또 어떻게 다른지

생각하시면서 참고하면 되겠습니다.

 

 

관계선택참여 (출처: 한국데이터산업진흥원)

 

 

자, 이렇게 관계의 분류에

대해서도 자세하게 알아보았습니다.

 

 

 

 

이제 이번 포스팅의 마지막인

관계의 정의 및 읽는 방법입니다.

 

우선 관계 체크사항입니다.

두 개의 엔터티 사이에 관계를 정의할 때

다음 사항을 체크해야 한다고 합니다.

 

1) 두 개의 엔터티 사이에

관심있는 연관 규칙이 존재하는가?

 

2) 두 개의 엔터티 사이에 정보의

조합이 발생되는가?

 

3) 업무기술서, 장표에 관계연결에

대한 규칙이 서술되어 있는가?

 

4) 업무기술서, 장표에 관계연결을

가능하게 하는 동사(Verb)가 있는가?

 

이 또한, 4지선다로 나오기

좋은 유형이니 알아두시면

좋겠다는 의견입니다!

 

 

이어서 관계 읽기 입니다.

데이터 모델을 읽는 방법은

먼저 관계에 참여하는 기준 엔터티를

하나 또는 각각으로 읽고

대상 엔터티의 개수(하나, 하나 이상)를

읽고 관계선택사양과 관계명을 읽도록 합니다.

 

1) 기준(Source) 엔터티를 한 개(One) 또는

각(Each)으로 읽는다.

 

2) 대상(Target) 엔터티의 관계참여도

즉 개수(하나, 하나 이상)를 읽는다.

 

3) 관계선택사양과 관계명을 읽는다.

 

한 번 예시 그림을 같이 봐보실까요?

 

 

관계의 읽는 방법 (출처: 한국데이터산업진흥원)

 

 

위의 관계를 정의를 한 사항에 대해서

뒷부분만 의문문으로 만들면 바로

관계를 도출하기 위한 질문  문장이 됩니다.

 

예를 들어, 주문과 제품과 관계를

질문하기 원할 때  “한 주문에 대해서

하나의 제품만을 주문합니까?”

라고 할 수도 있고 또는

“한 제품은 하나의 주문에 대해서만

주문을 접수받을 수 있습니까?”

라고 질문할 수 있다.

 

이러한 질문 방법은 엔터티간

관계설정뿐 아니라

업무의 흐름도 분석이 되는 실제

프로젝트에서 효과적인 방법이 된 수 있죠!

 

 

이렇게 이번 포스팅에서는

관계에 대해서 알아보았습니다.

 

어떻게 괜찮으셨을까요?

그럼 이제 연휴 잘 보내시고!

 

다음 포스팅에서는

식별자에 대한 내용으로

다시 찾아뵙도록 하겠습니다.

 

감사합니다.

 

 

 

 

구독과 좋아요는 제게 큰 힘이 됩니다 :)

 

728x90
LIST