권순용의 데이터모델링 이야기
관계의 개념을 이해하자 0 0 2,641

by axiom 관계 Relationship 릴레이션 [2015.08.13]


데이터 모델링에서 중요한 요소 중 이 글에서 소개할 마지막 요소는 관계(Relationship)다. 관계는 엔티티 속성을 연결해주는 역할을 한다

관계에 의해서 엔티티와 속성이 의미를 가지게 되므로 관계는 데이터 모델링에서 가장 중요한 요소라고 해도 과언이 아니다.

이처럼 모델링에서의 관계는 데이터 정합성을 위해 매우 중요한 항목이다. 그렇다면 관계의 정의와 특징에는 어떤 것들이 있을까?

관계의 개념

관계는 Cardinality, Selectivity, 방향 이 세 가지 요소로 구성된다.

  • [그림 1] 관계의 구성요소
  • 관계(Relationship)의 개념을 이해하자

Cardinality

Cardinality는 분포도를 의미한다.

카드 엔티티의 Unique Identifier인 1개의 카드번호 데이터에 대한 여러 개의 데이터가 거래내역 엔티티에 있다고 가정하자.

이 경우 카드 엔티티의 데이터에 대한 거래내역 엔티티의 데이터는 여러 건인데, 1:M의 관계를 가지며 그 표현은 <그림 1>처럼 여러 개의 선으로 표현할 수 있다.

물론 거래내역 엔티티에서 Unique Identifier인 1개의 데이터에 대한 카드 엔티티의 데이터가 1개인 경우 하나의 선으로 표현될 것이다.

Cardinality를 통해서는 어느 엔티티가 부모 엔티티인지를 확인할 수 있으며, 이러한 특성은 애플리케이션을 작성하는 과정에서도 매우 중요하게 쓰인다.

Selectivity

Selectivity는 존재 유무를 뜻한다. 만약 존재할 수밖에 없다면 동그라미로 표시한다.

<그림 1>에서 카드 엔티티의 Unique Identifier인 1개의 카드번호 값에 대한 거래내역 엔티티에는 해당 카드번호 값을 가진 데이터가 있을 수도 없을 수도 있다. 이는 거래내역 엔티티에 동그라미로 관계가 표현돼 있기 때문이다.

그러나 거래내역 엔티티의 Unique Identifier인 1개의 데이터에 대한 해당 카드번호 값은 항상 카드 엔티티에 있어야 한다. 이는 관계에서 카드 엔티티에 동그라미 표시가 없기 때문이다.

방향

관계의 방향에는 두 가지 종류가 있다.

<그림 1>처럼 카드 엔티티에서 거래내역 엔티티의 관계를 바라보는 방향과 거래내역 엔티티에서 카드 엔티티를 보는 2개의 관계가 그것이다. 즉 어떤 방향으로 둘의 관계를 해석하는가에 따라 그 의미가 달라진다.

예컨대 카드 엔티티에서 거래내역 엔티티를 보는 방향의 경우 1개의 카드번호 값은 여러 개의 거래내역 엔티티에 데이터를 생성하는 관계다. 이와 반대로 거래내역 엔티티 관점에서 카드 엔티티를 보면 하나의 거래내역 엔티티의 데이터는 1개의 카드번호에 의해 발생하는 관계라고 할 수 있다.

관계의 특징

이처럼 관계는 엔티티에 어떤 데이터가 포함됐는가에 따라 그 해석이 달라질 수 있다. 엔티티의 성격이 관계에 영향을 끼치는 것이다. 이러한 관계의 특징은 다음과 같이 정의할 수 있다.

  • [그림 2] 관계의 특징
  • 관계(Relationship)의 개념을 이해하자

관계도 집합이다

관계는 두 엔티티 사이의 교집합을 의미한다. 관계는 두 엔티티의 Unique Identifier에 대한 교집함을 의미하므로, 즉 집합이라고 할 수 있다.

관계는 엔티티 정의에 따라 다양해진다

보통 사원 엔티티와 부서 엔티티는 M:1의 관계에 놓인다. 이는 사원 한명이 1개의 부서에 소속되고, 1개의 부서에는 여러 명의 사원이 포함되기 때문이다. 그러나 업무에 따라 부서 구성이 이와 다를 수 있다.

예컨대 사원 엔티티의 Unique Identifier에 사원번호 속성뿐 아니라 이동일자 속성까지 포함돼 있다면 어떻게 될까? 이 경우 사원 엔티티는 해당 사원들의 이력까지 관리하는 것이다.

이력을 관리하면 사원 한 명이 두 번 부서를 이동해도 부서의 엔티티와의 관계는 여러 건의 데이터가 될 것이다.

그러므로 사원 엔티티와 부서 엔티티는 M:M 관계가 된다. 이처럼 엔티티는 어떻게 정의하느가에 따라 관계가 변하게 된다.

관계는 정의하기에 따라 다양해진다

엔티티 정의에 의해 관계가 바뀌듯 어떤 속성으로 두 엔티티를 보는가에 따라 관계가 변함에 유의하자.

<그림 2>에서 보험 계약 엔티티와 고객 엔티티를 살펴보자. 계약의 속성으로 두 엔티티를 보는 것과 피보험자 속성으로 보는 것은 분명 다르다. 계약의 속성으로 보는 것과 피보험자의 관계로 보는 것 또한 관계의 Selectivity가 달라질 것이다.

이처럼 관계는 데이터 모델링 시 엔티티와 엔티티 사이의 관련성을 의미한다. 데이터 모델링을 수행한 ERD를 보면 수많은 엔티티가 있는데, 각각의 엔티티들은 다른 엔티티와 관계를 가지고 있다.

<그림 1>의 예제에서 카드 엔티티와 거래내역 엔티티가 존재하며 해당 엔티티들을 확대해보면 두 엔티티 사이에는 관계가 존재한다. 여기에는 관계의 3요소가 존재한다.

방향

카드 엔티티는 거래내역 엔티티와 거래내역을 생성하는 관계며, 거래내역 엔티티는 카드 엔티티에 소속되는 관계다. 이처럼 2개의 엔티티 사이에는 항상 두 가지 방향이 존재한다.

Cardinality

카드 엔티티의 데이터 1개는 거래내역 엔티티에 여러 개의 데이터를 생성할 수 있기 때문에 여러 개의 선으로 표시할 수 있다. 거래내역 엔티티의 데이터 1개는 하나의 카드 엔티티의 데이터에 소속되므로 하나의 선으로 표시한다.

Selectivity

거래내역 엔티티에 있는 1개의 데이터는 반드시 해당 값에 대한 카드 엔티티의 데이터가 존재해야 한다. 1개의 카드 엔티티의 데이터의 경우 거래내역 엔티티에 데이터가 없을 수도 있다.

참고링크

- 강좌 URL : http://www.gurubee.net/lecture/2873

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입