728x90
320x100
관계의 정의
- 엔터티 간의 논리적인 관련성, 동사형
- 사전적으로 정의하면 상호 연관성이 있는 상태이다
- “엔터티의 인스턴스 사이의 논리적인 연관성으로서 존재의 형태 로서나 행위로서 서로에게 연관성이 부여된 상태” 라고 할 수 있다.
관계의 페어링
- 페어링 : 인스턴스가 개별적으로 관계를 가지는 것
- 관계 : 페어링의 집합을 관계로 표현
- 개별 인스턴스가 각각 다른 종류의 관계를 가지고 있다면 두 엔터티 사이에 두 개 이상의 관계가 형성될 수 있다.
- 관계 페어링(Relationship Paring) : 각 엔터티 인스턴스가 자신과 관련된 다른 엔터티 인스턴스와의 관계에 참여하는 것
* 인스턴스 각각은 자신의 연관성을 가지고 있을 수 있음
* 이것을 집합하여 “강의한다”라는 관계를 도출
관계의 분류
- 존재의 의한 관계
- 단순히 두 엔터티가 서로 존재함으로써 형성되는 관계
- 어떤 특정한 행위나 이벤트에 의해 발생하는 것이 아니라, 그저 엔터티들이 독립적으로 존재함으로써 자연스럽게 형성된다.
- ex) 한 사원이 특정 부서에 소속되어 있는 것은 단순히 그 사원과 부서가 존재하기 때문에 관계가 형성되는 것
- 행위에 의한 관계
- 두 엔터티 간의 관계가 특정한 행위나 이벤트에 의해 발생
- 한 엔터티가 다른 엔터티와의 특정한 행위에 의해 관계를 형성한다.
- ex) 주문 엔터티의 주문번호는 고객이 ‘주문한다’라는 행위에 의해 발생되었기 때문에 두 엔터티 사이의 관계는 행위에 의한 관계가 되는 것
관계의 표기법
1. 관계명
- 엔터티가 관계에 참여하는 형태를 지칭한다.
- 각각의 관계는 두 개의 관계명을 가지고 있다.
- 또한 각각의 관계명에 의해 두 가지의 관점으로 표현될 수 있다
- 관계시작점(The Beginning) : 엔터티에서 관계가 시작되는 편
- 관계끝점(The End) : 받는 편
- 관계 시작점과 끝점 모두 관계이름을 가져야 하며 참여자의 관점에 따라 관계이름이 능동적(Active)이거나 수동적(Passive)으로 명명된다.
관계의 명명 규칙
- 애매한 동사를 피한다.
- 예를 들면 ‘관계된다’, ‘관련이 있다’, ‘이다’, ‘한다’ 등은 구체적이지 않아 어떤 행위가 있는지 또는 두 참여자간 어떤 상태가 존재하는지 파악할 수 없다.
- 현재형으로 표현한다.
- 예를 들면 ‘수강을 신청했다’, ‘강의를 할 것이다’라는 식으로 표현해서는 안된다. ‘수강 신청한다’, ‘강의를 한다’로 표현해야 한다.
2. 관계 차수
- 1 : 1 관계 차수
- 관계에 참여하는 각각의 엔터티는 관계를 맺는 다른 엔터티에 대해 단지 하나의 관계만을 가지고 있다.
- 1 : M 관계 차수
- 한 명의 사원은 한 부서에 소속되고 한 부서에는 여러 사원을 포함한다.
- M : M 관계 차수
- 관계에 참여하는 각각의 엔터티는 관계를 맺는 다른 엔터티에 대해 하나나 그 이상의 수와 관계를 가지고 있다
3. 관계선택사양 (Optionality)
- 필수는 I 선택은 O로 표시
“반드시 지하철의 문이 닫혀야만 지하철은 출발한다.”
지하철출발과 지하철문닫힘은 필수(Mandatory)적으로 연결 관계가 있는 것이다. 이와 같은 것이 데이터 모델의 관계에서는 필수참여관계(Mandatory)가 된다.
지하철의 출발을 알리는 안내방송은 지하철의 출발과 상관없이 방송해도 아무런 문제가 발생하지 않는다. 즉 안내방송시스템이 고장이 나도 지하철운행에는 별로 영향을 주지 않는다.
지하철의 출발과 지하철방송과는 정보로서 관련은 있지만 서로가 필수적인(Mandatory) 관계는 아닌 선택적인 관계(Optional)가 되는 것이다. 이와 같은 것이 데이터 모델 관계에서는 선택참여관계(Optional)가 된다
관계 정의 시 체크 사항
- 두 개의 엔터티 사이에 관심있는 연관 규칙이 존재하는가?
- 두 개의 엔터티 사이에 정보의 조합이 발생되는가?
- 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?
- 업무기술서, 장표에 관계연결을 가능하게 하는 동사(Verb)가 있는가?
종류
- ERD 기준: 표기구분 안함
- 존재 관계: 엔터티 간의 상태
- 행위 관계: 엔터티 간에 발생하는 행위
- UML(Unified Modeling Language) 기준
- 연관 관계(Association): 실선 표기
- 의존 관계(Dependency): 점선 표기
- 식별자에 따른 분류
- 식별 관계
- 부모 엔터티의 식별자가 자식 엔터티의 주식별자로 사용
- 이는 부모 엔터티의 식별자가 자식 엔터티의 기본 키(primary key)로 사용되는 경우
- ex) "사용자(User)"와 "가입 정보(Registration)"라는 두 엔터티
-> 사용자가 여러 가입 정보를 가질 수 있지만, 각 가입 정보는 특정 사용자에게 고유하게 식별
-> 이 경우, 사용자의 식별자가 가입 정보의 주식별자로 사용 - 약한 엔터티: 부모 엔터티에 종속되어 존재, 부모 엔터티의 식별자에 의해만 식별되어 부모 엔터티 없이는 존재할 수 없다. (↔ 강한 엔터티는 독립적으로 존재)
- 비식별 관계
- 부모 엔터티의 식별자가 자식 엔터티에서 일반 컬럼으로 참조
- 부모 엔터티의 식별자가 자식 엔터티의 주식별자가 되지 않음
- 이 경우, 부모 엔터티의 식별자가 자식 엔터티의 외래 키(foreign key)로 사용
- ex) "사용자(User)"와 "게시물(Article)"라는 두 엔터티
-> 사용자는 여러 게시물을 작성할 수 있지만, 각 게시물은 특정 사용자에게만 연결되어 있을 수 있다.
-> 그러나 모든 게시물은 반드시 특정 사용자에게 연결되어 있지 않을 수도 있다.
-> 이 경우, 사용자의 식별자가 게시물의 외래 키로 사용되지만, 모든 게시물이 특정 사용자에게 연결되어 있지 않아도 된다. - 식별 관계만으로 연결되면 주식별자 수가 많아질 수밖에 없으므로 1) 관계 강약 분석 2) 자식 엔터티의 독립 PK 필요성 3) SQL 복잡성과 개발 생산성 고려 필요
- 식별 관계
관계 읽기
- 기준(Source) 엔터티를 한 개(One) 또는 각(Each)으로 읽는다.
- 대상(Target) 엔터티의 관계 참여도 즉 개수(하나, 하나 이상)를 읽는다.
- 관계선택사양과 관계 명을 읽는다.
각각의/하나의 | 기준 엔터티 | 관계 차수 | 대상엔터티 | 필수/선택 | 관계명 |
각각의 | 고객은 | 여러 개의 | 주문을 | 때때로 | 주문한다 |
각각의 | 주문은 | 하나의 | 고객을 | 반드시 | 가진다 |
300x250
반응형
GitHub 댓글