메뉴 건너뛰기

bysql.net

제4절_관계(Relationship)

2012.03.04 09:24

실천하자 조회 수:13028

1. 관계의 개념

가. 관계의 정의

관계(Relationship)를 사전적으로 정의하면 상호 연관성이 있는 상태

데이터 모델적 정의

“엔터티의 인스턴스 사이의 논리적인 연관성으로서 존재의 형태로서나 행위로서 서로에게 연관성이 부여된 상태”

관계는 엔터티와 엔터티 간 연관성을 표현하기 때문에 엔터티의 정의에 따라 영향을 받기도 하고, 속성 정의 및 관계 정의에 따라서도 다양하게 변할 수 있다.

나. 관계의 패어링

유의해야할 점은 관계는 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것(패어링)이고 이것의 집합을 관계로 표현한다는 것이다. 따라서 개별 인스턴스가 각각 다른 종류의 관계를 가지고 있다면 두 엔터티 사이에 두 개 이상의 관계가 형성될 수 있다.
각각의 엔터티의 인스턴스들은 자신이 관련된 인스턴스들과 관계의 어커런스로 참여하는 형태를 관계 패어링(Relationship Paring)이라 한다. 

2. 관계의 분류

[그림 Ⅰ-1-32]에서 왼쪽 편에 있는 모델은 황경빈이란 사원이 DB팀에 소속되어 있는 상태를 나타낸다. ‘소속된다’라는 의미는 행위에 따른 이벤트에 의해 발생되는 의미가 아니고 그냥 황경빈사원이 DB팀에 소속되어 있기 때문에 나타나는 즉 존재의 형태에 의해 관계가 형성되어 있는 것이다.
반면에 오른편에 있는 김경재 고객은 ‘주문한다’라는 행위를 하여 CTA201이라는 주문번호를 생성하였다. 주문 엔터티의 CTA201 주문번호는 김경재 고객이 ‘주문한다’라는 행위에 의해 발생되었기 때문에 두 엔터티 사이의 관계는 행위에 의한 관계가 되는 것이다.


3. 관계의 표기법

관계에서는 표기법이 상당히 복잡하고 여러 가지 의미를 가지고 있다. 다음 3가지 개념과 함께 표기법을 이해할 필요가 있다.

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

가. 관계명(Membership)

관계명은 엔터티가 관계에 참여하는 형태를 지칭한다. 각각의 관계는 두 개의 관계명을 가지고 있다. 또한 각각의 관계명에 의해 두 가지의 관점으로 표현될 수 있다.

나. 관계차수(Degree/Cardinality)

두 개의 엔터티간 관계에서 참여자의 수를 표현하는 것을 관계차수(Cardinality)라고 한다. 가장 일반적인 관계차수 표현방법은 1:M, 1:1, M:N이다. 가장 중요하게 고려해야 할 사항은 한 개의 관계가 존재하느냐 아니면 두 개 이상의 멤버쉽이 존재하는지를 파악하는 것이 중요하다.
관계차수를 표시하는 방법은 여러 가지 방법이 있지만 Crow’s Foot 모델에서는 선을 이용하여 표현한다. 한 개가 참여하는 경우는 실선을 그대로 유지하고 다수가 참여한 경우는(Many) 까마귀발과 같은 모양으로 그려준다.

1) 1:1(ONE TO ONE) 관계를 표시하는 방법

관계에 참여하는 각각의 엔터티는 관계를 맺는 다른 엔터티의 엔터티에 대해 단지 하나의 관계만을 가지고 있다.

2) 1:M(ONE TO MANY) 관계를 표시하는 방법

관계에 참여하는 각각의 엔터티는 관계를 맺는 다른 엔터티의 엔터티에 대해 하나나 그 이상의 수와 관계를 가지고 있다. 그러나 반대의 방향은 단지 하나만의 관계를 가지고 있다.

3) M:M(MANY TO MANY) 관계를 표시하는 방법

관계에 참여하는 각각의 엔터티는 관계를 맺는 다른 엔터티의 엔터티에 대해 하나나 그 이상의 수와 관계를 가지고 있다. 반대의 방향도 동일하게 관계에 참여하는 각각의 엔터티는 관계를 맺는 다른 엔터티의 엔터티에 대해 하나 또는 그 이상의 수와 관계를 가지고 있다. 이렇게 M:N 관계로 표현된 데이터 모델은 이후에 두 개의 주식별자를 상속받은 관계엔터티를 이용하여 3개의 엔터티로 구분하여 표현한다.

다. 관계선택사양(Optionality)

이와 같은 것이 데이터 모델 관계에서는 선택참여관계(Optional)가 된다. 참여하는 엔터티가 항상 참여하는지 아니면 참여할 수도 있는지를 나타내는 방법이 필수(Mandatory Membership) 선택참여(Optional Membership)이다.
필수참여는 참여하는 모든 참여자가 반드시 관계를 가지는, 타 엔터티의 참여자와 연결이 되어야 하는 관계이다. 예를 들면 주문서는 반드시 주문목록을 가져야 하며 주문목록이 없는 주문서는 의미가 없으므로 주문서와 주문목록은 필수참여관계가 되는 것이다. 반대로 목록은 주문이 될 수도 있고 주문이 되지 않은 목록이 있을 수도 있으므로 목록과 주문목록과의 관계는 선택참여(Optional Membership)가 되는 것이다. 선택참여된 항목은 물리속성에서 Foreign Key로 연결될 경우 Null을 허용할 수 있는 항목이 된다. 만약 선택참여로 지정해야 할 관계를 필수참여로 잘못 지정하면 애플리케이션에서 데이터가 발생할 때 반드시 한 개의 트랜잭션으로 제어해야 하는 제약사항이 발생한다. 그러므로 설계단계에서 필수참여와 선택참여는 개발시점에 업무 로직과 직접적으로 관련된 부분이므로 반드시 고려되어야 한다.
선택참여관계는 ERD에서 관계를 나타내는 선에서 선택참여하는 엔터티 쪽을 원으로 표시한다. 필수참여는 아무런 표시를 하지 않는다.
만약 관계가 표시된 양쪽 엔터티에 모두 선택참여가 표시된다면, 즉 0:0(Zero to Zero)의 관계가 된다면 그 관계는 잘못될 확률이 많으므로 관계설정이 잘못되었는지를 검토해 보아야 한다.

관계선택사양은 관계를 통한 상대방과의 업무적인 제약조건을 표현하는 것으로서 간단하면서 아주 중요한 표기법이다. 이것을 어떻게 설정했는지에 따라 참조무결성 제약조건의 규칙이 바뀌게 되므로 주의 깊게 모델링을 해야 한다.

4. 관계의 정의 및 읽는 방법

가. 관계 체크사항

두 개의 엔터티 사이에서 관계를 정의할 때 다음 사항을 체크해 보도록 한다.

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

나. 관계 읽기

 

※ 자료출처 : DBguide.Net

       http://www.dbguide.net/db.db?cmd=view&boardUid=148181&boardConfigUid=9&categoryUid=216&boardIdx=132&boardStep=1

        

  • SQL 전문가 자격증 (bysql.net 2012년 1차 스터디)
  • 작성자: 위충환 (실천하자)
  • 최초작성일: 2012년 03월 03일
  • 본문서는 bysql.net 스터디 결과입니다 .본 문서를 인용하실때는 출처를 밝혀주세요. http://www.bysql.net
  • 문서의 잘못된 점이나 질문사항은 본 문서에 댓글로 남겨주세요. ^^

 

번호 제목 글쓴이 날짜 조회 수
58 Front Page file 운영자 2012.02.21 186697
57 Week1_이진우 [5] ljw 2012.07.16 46262
56 제1절_성능_데이터_모델링의_개요 file ljw 2012.03.04 44546
55 제4절_고급_조인_기법 suspace 2012.06.05 31231
54 제1절_Lock balto 2012.05.05 25258
53 제1절_데이터_모델의_이해 실천하자 2012.03.04 22594
52 제5절_식별자 file ljw 2012.03.04 18958
51 제1절_표준_조인(STANDARD_JOIN) file ljw 2012.03.19 15924
50 제3절_반정규화와_성능 file ljw 2012.03.04 15291
49 제5절_WHERE_절 file 보라빛고양이 2012.03.10 14879
» 제4절_관계(Relationship) [1] 실천하자 2012.03.04 13028
47 제5절_그룹_함수(GROUP_FUNCTION) file balto 2012.03.31 12458
46 제2절_소트_튜닝 file ljw 2012.06.04 12024
45 제2절_DDL(DATA_DEFINITION_LANGUAGE) [1] file balto 2012.03.09 11722
44 제7절_GROUP_BY_HAVING_절 suspace 2012.03.12 11531
43 제1절_데이터베이스_아키텍처 [2] ljw 2012.04.23 11523
42 제4절_서브쿼리 오예스 2012.03.27 11123
41 제1절_관계형_데이터베이스_개요 balto 2012.03.09 10446
40 제2절_정규화와_성능 file ljw 2012.03.04 10394
39 제2절_인덱스_튜닝 balto 2012.05.18 9904