SQLD/데이터 모델링의 이해

1-4 관계

마띠(쥔장) 2020. 2. 13. 21:09

관계의 정의

관계는 엔터티 간의 관련성을 의미하며 존재 관계와 행위 관계로 분류된다. 

관계의 패어링

관계는 엔터티 안의 인스턴스가 개별적으로 관계를 가지는 '관계 패어링Relationship Paring'의 집합이다. 따라서 개별 인스턴스가 각각 다른 종류의 관계를 가진다면 두 엔터티 사이에 두 개 이상의 관계가 형성될 수 있다.

관계의 분류

관계를 연결할 때 어떤 목적으로 연결되었느냐에 따라 존재에 의한 관계와 행위에 의한 관계로 구분된다.

1. 존재 관계

-엔터티 간의 상태를 의미한다.

-'소속된다'라는 의미는 행위(이벤트)에 의해 발생되는 의미가 아니라 황경빈 사원이 DB팀에 소속되어 있기 때문에, 즉 존재에 의해 형성된 의미이다.

-UML 클래스 다이어그램의 관계 중 연관관계Associatinon이며 실선으로 표현한다 (ERD에서는 표기 구분 X)

2. 행위 관계

-엔터티 간에 어떤 행위가 있는 것

-계좌를 개설하고 이를 통해 주문을 발주하는 것처럼 행위에 의해 관계가 형성된다. 위의 예를 보면 '주문한다'는 행위를 통해 CTA201 주문번호가 생성되었으므로 이는 행위에 의한 관계이다.

-UML 클래스 다이어그램의 관계 중 의존관계Dependency이며 점선으로 표현한다 (ERD에서는 표기 구분 X)

관계의 표기법

  • 관계명Membership: 관계의 이름
  • 관계차수Cardinality: 1:1, 1:M:, M:N
  • 관계선택사양Optionality: 필수관계, 선택관계

관계명Membership

관계명은 엔터티가 관계에 참여하는 형태이다. 각각의 관계는 두 개의 관계명을 가지며 이에 의해 두 가지 관점으로 표현된다.

엔터티에서 관계가 시작되는 편은 관계시작점The Beginning, 받는 편은 관계끝점The End이라고 부른다. 관계시작점과 관계끝점 모두 관계명을 가져야 하며 참여자의 관점에 따라 관계이름이 능동적Active/수동적Passive으로 명명된다. 다음은 관계명 명명규칙이다.

  1. 애매한 동사는 피한다: '관계된다', '관련이 있다' 등은 구체적이지 않아 어떤 행위가 있는지/두 참여자간 어떤 상태가 존재하는지 파악하기 어렵다.
  2. 현재형으로 표현한다: '수강을 신청했다', '강의를 할 것이다'가 아닌, '수강 신청한다', '강의 한다'로 표현한다.

관계차수Degree/Cardinality

관계차수는 두 엔터티 관계에서의 참여자 수다. 가장 일반적인 관계차수 표현법은, 1:M, 1:1, M:N이다.

1. 1:1 관계

-관계에 참여하는 각각의 엔터티는 관계를 맺는 다른 엔터티에 대해 딱 하나의 관계만 가진다

-1대1 관계는 완전 1대1 관계와 선택적 1대1 관계로 나뉜다.

종류 설명
완전 1대1 관계 한 엔터티에 관계되는 엔터티가 하나만 있는 경우로, 반드시 존재한다.
선택적 1대1 관계 한 엔터티에 관계되는 엔터티가 하나거나 없을 수 있다.

2. 1:M 관계

-관계에 참여하는 각각의 엔터티가 관계를 맺는 다른 엔터티에 대해 하나 이상의 관계를 맺는 것

-하지만 반대 방향은 딱 하나의 관계만 가진다

-예를 들어 한 고객은 여러 개의 계좌를 가질 수 있지만, 계좌주는 반드시 한 명이다.

3. M:N 관계

-두 개 엔터티가 서로 여러 개의 관계를 가지는 것

-관계형 DB에서 M:N 관계의 조인은 카테시안 곱이 발생한다. 그래서 두 개의 주식별자를 상속받은 관계 엔터티를 이용해 3개의 엔터티로 구분해 표현한다(M대N 관계를 1대N, N대1로 해소한다).

관계선택사양Opionality

지하철 운행과 지하철 문과의 관계를 예시로 들어보자. "지하철 문이 반드시 닫혀야 지하철이 출발한다"는, 필수적 연결관계를 찾을 수 있다. 이를 데이터 모델의 관계에서는 필수참여관계Mandatory라고 한다. 필수참여관계는 모든 참여자가 타 엔터티의 참여자와 반드시 관계를 가진다. 예를 들어 주문서는 반드시 주문목록을 가지며 주문목록이 없는 주문서는 의미가 없으므로 주문서-주문목록은 필수참여관계이다. 반면 지하철 안내방송시스템은 그렇지 않다. 지하철 내 안내 방송은 음성 시작 시점이 조금 달라져도, 고장으로 한 정거장에서 방송을 하지 못해도 지하철 운행에는 큰 영향을 주지 않는다. 이처럼 관련은 있지만 필수적이지 않은 관계를 데이터 모델에서는 선택참여관계Optional라고 한다. 목록은 주문이 될 수도 있고 주문이 되지 않는 목록이 있을 수도 있어서 목록-주문목록은 선택참여관계이다.

구분 내용
필수참여관계 = 필수적 관계 반드시 하나는 있어야 하는 관계이며 '|'로 표현된다
선택참여관계 = 선택적 관계 없을 수도 있는 관계며 'O'로 표현한다.

관계 체크사항

  • 두 엔터티 사이에 관심있는 연관규칙이 존재하는가?
  • 두 엔터티 사이에 정보의 조합이 발생되는가?
  • 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?
  • 업무기술서, 장표에 관계연결을 가능하게 하는 동사Verb가 있는가?

관계 읽기

  1. 기준Source 엔터티를 한 개One 또는 각Each으로 읽는다.
  2. 대상Target 엔터티의 관계참여도인 개수(하나, 하나 이상)를 읽는다.
  3. 관계선택사양과 관계명을 읽는다.

위 관계 정의의 뒷부분을 의문문으로 만들면, 바로 관계를 도출하기 위한 질문 문장이 된다. 위의 질문을 업무를 분석하는 자기 스스로에게 질문하거나, 장표나 업무기술서 또는 업무를 잘 알고 있는 업무담당 고객과 대화를 하면서 관계를 완성해 갈 수 있다. 예시로, 주문과 제품과 관계를 질문하기 원할 때 “한 주문에 대해서 하나의 제품만을 주문합니까?”라고 할 수도 있고 또는 “한 제품은 하나의 주문에 대해서만 주문을 접수받을 수 있습니까?”라고 질문할 수 있다. 이러한 질문 방법은 엔터티간 관계설정뿐 아니라 업무 흐름도 분석이 되는 효과적인 방법이다.

728x90

'SQLD > 데이터 모델링의 이해' 카테고리의 다른 글

2-1 성능 데이터모델링의 개요  (0) 2020.02.16
1-5 식별자  (0) 2020.02.16
1-3 속성  (0) 2020.02.13
1-2 엔터티  (0) 2020.02.13
1-1 데이터 모델의 이해  (0) 2020.02.10