본문 바로가기

SQLD

7일차- 관계

관계를 사전적으로 정의하면 상호 연관성이 있는 상태로 말할 수 있다. 이를 데이터 모델에 대입해 정의하면

"엔티티의 인스턴스 사이 논리적인 연관성으로서 존재의 형태로서나 행위로서 서로에게 연관성이 부여된 상태" 이다. 관계는 엔티티와 엔티티 간 연관성을 표현하기 때문에 엔티티의 정의에 따라 영향을 받기도 하고, 속성 정의 및 관계 정의에 따라 다양하게 변할 수 있다.

 

 관계의 패어링

유의해야할 점은 관계는 엔티티 안에 인스턴스가 개별적으로 관계를 가지는 것 이고 이것의 집합을 관계로 표현한다는 것이다. 개별 인스턴스가 각각 다른 종류의 관계를 가지고 있다면 두 엔티티 사이에 두 개 이상의 관계가 형성될 수 있다.

관계의 패어링: 각각의 엔티티의 인스턴스들이 자신과 관련된 인스턴스들과의 어커런스(occurrence) 관계를 가지는 형태

엔티티는 인스턴스의 집합을 논리적으로 표현하였다면 관계는 관계 패어링의 집합을 논리적으로 표현한 것이다.

 

최초의 ERD에서 관계는 속성을 가질 수 있었으나 요즘 ERD에서는 관계를 위해 속성을 도출하지는 않는다. 관계의 표현에는 이항 관계, 삼항 관계, n항 관계가 존재할 수 있는데 실제에 있어서 삼항 이상은 잘 나타나지 않음.

 

 관계의 분류

관계가 존재에 의한 관계와 행위에 의한 관계로 구분될 수 있는 것은 관계를 연결함에 있어 어떤 목적으로 연결되었느냐에 따라 분류하기 때문. 즉 존재의 형태에 의해 관계가 형성되어 있는 것이다. 예를들어 어떤 행위에 의해 관계가 발생 되었다문 두 엔티티 사이의 관계는 행위에 의한 관계가 되는 것이다.

 UML에는 연관관계와 의존관계가 있는 클래스다이어그램이 있다.

연관관계: 항상 이용하는 관계로 존재적 관계에 해당. 실선으로 표현.

의존관계: 상대방 클래스의 행위에 의해 관계가 형성될 때 구분하여 표현. 점선으로 표현.

--> ERD에서는 존재적 관계와 행위에 의한 관계를 구분하지 않고 표현했다면 클래스다이어그램에서는 이것을 구분하여 표현했다. 

 

 관계의 표기법

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

관계명: 관계의 이름

관계차수: 1:1, 1:M, M:N

관계선택사양: 필수관계, 선택관계

 

 관계명

관계명은 엔티티가 관계에 참여하는 형태를 지칭. 각 관계는 두 개 의 관계명을 가지고 잇다. 각각의 관계명에 의해 두 가지의 관점으로 표현될 수 있다. 엔티티에서 관계가 시작되는 편을 관계시작점, 받는 편을 관계끝점 이라 한다. 참여자의 관점에 따라 관계이름이 능동적이거나 수동적으로 명명됨.

 관계차수

두 개의 엔티티간 관계에서 참여자의 수를 표현하는 것. 한 개의 관계가 존재하느냐 아니면 두 개 이상의 멤버십이 존재하느냐를 파악하는게 중요하다.

 관계선택사양

참여하는 엔티티가 항상 참여하는지 아니면 참여할 수도 있는지를 나타내는 방법이 필수참여와 선택참여 이다.

필수참여: 모든 참여자가 반드시 관계를 가지는 관계.

선택참여: 관계를 가질수도 아닐수도 있는 관계. 물리속성에서 FK로 연결될 경우 Null을 허용할 수 있다.

설계단계에서 필수참여와 선택참여는 개발시점에 업무 로직과 직접적으로 관련된 부분이므로 반드시 고려되어야 함. 선택참여관계는 ERD에서 관계를 나타내는 선에서 선택참여하는 엔티티 쪽을 원으로 표시. 만약 양쪽 엔티티 모두 원을 가지고 있다면 잘못된 관계일 확률이 많으므로 검토 해야함.

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

 

 관계의 정의 및 읽는 방법

두 개의 엔티티 사이에서 관계를 정의할 때 체크사항

1) 두 개의 엔티티 사이에 관심있는 연관규칙이 존재하는가?

2) 두 개의 엔티티 사이에 정보의 조합이 발생되는가?

3) 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?

4) 업무기술서, 장표에 관계연결을 가능하게 하는 동사가 있는가?

 관계읽기

데이터 모델을 읽는 방법은 먼저 관계에 참여하는 기준 엔티티를 하나 또는 각으로 읽고 대상 엔티티의 개수를 읽고 관계선택사양과 관계명을 읽도록 한다.

'SQLD' 카테고리의 다른 글

8일차-식별자  (0) 2021.02.25
7일차-문제풀이  (0) 2021.02.20
6일차-속성  (0) 2021.02.16
5일차- 문제풀이  (0) 2021.02.14
4일차- 엔티티  (0) 2021.02.13