2024. 7. 23. 19:50ㆍSQL
1. 관계의 개념
가. 관계의 정의
관계(Relationship)를 사전적으로 정의하면 상호 연관성이 있는 상태
데이터 모델에서의 정의 : 엔티티의 인스턴스 사이의 논리적인 연관성으로서 존재의 형태로서나 행위로서 서로에게 연관성이 부여된 상태.
엔티티의 정의에 따라 영향을 받기도하고 속성 정의 및 관계 정의에 따라서도 다양하게 변할 수 있음.
(엔티티 끼리의 공감대를 형성하는 것 = 관계)
나. 관계의 패어링
엔티티 안에 인스턴스가 개별적으로 관계를 가지는 것 = 페어링
페어링의 집합 = 관계
개별 인스턴스가 각각 다른 종류의 관계를 가지고 있다면 두 엔티티 사이에 두 개 이상의 관계가 형성될 수 있음.
각 엔티티 인스턴스들은 관련된 인스턴스들과 관계의 어커런스로 참여하는 형태를 관계 페어링(Relationship Paring)이라고 함.
관계는 관계 페어링의 집합을 논리적으로 표현.
ERD(Chen 모델)에서는 관계는 속성을 가질 수 있으나, 요즘 ERD는 관계를 위해 속성을 도출하지는 않음
관계 표현에는
이항 관계(Binary Relationship)
삼항 관계(Ternary Relationship)
N항 관계가 존재할 수 있는데 삼항관계 이상은 잘 나타나지 않음.

2. 관계의 분류
존재에 의한 관계 / 행위에 의한 관계로 구분될 수 있는 것은 어떤 목적으로 연결되었느냐에 따라 분류함.

왼쪽 모델은 황경빈 사원이 이벤트에 의해(행위)발생되는 것이 아니고 DB팀에 소석되어 있기 때문(존재)에 나타나는 존재의 형태에 의해 관꼐 형성
오른쪽 모델은 김경재 고객이 CTA201을 주문한다라는 (행위)에 의해 발생되었기에 행위에 의한 관계가 되는 것.
UML(Unified Modoeling Language)에는 클래스다이어그램의 관계 중 연관관계(Association)와 의존관계(Dependency)가 있음.
연관관계 = 항상 이용하는 관계로 존재적 관계에 해당
의존관계 = 상대방 클래스의 행위에 의해 관계가 형성될 때를 구분하여 표현
ERD에서는 존재적 관계와 행위에 의한 관계를 구분하지 않고 표현했다면, 클래스다이어그램에서는 이것을 구분하여 연관관계와 의존관계로 표현함. 연관관계는 실선/소스코드에서 멤버변수로 선언, 의존 관계는 점선/행위코드인 Operaion(Method)에서 파라미터 등으로 이용함
3. 관계의 표기법
관계에서는 표기법이 상당히 복잡하고 여러 가지 의미를 가짐. 3개념을 이해해라
- 관계명(Membership) : 관계의 이름
- 관계차수(Cardinality) : 1:1, 1:M, M:N
- 관계선택사양(Optionality) : 필수관계, 선택관계
가. 관계명(Membership)
관계에 참여하는 형태를 지칭, 관계는 두개의 관계명을 가지고 있다. 각각의 관계명에 의해 두 가지의 관점으로 표현될 수 있음.

관계가 시작되는 편을 관계시작점
받는 편을 관계끝점.
관계시작점과 관계끝점 모두 관계이름을 가져야하며 참여자의 관점에 따라 능동적이거나 수동적으로 명명됨. 다음은 명명규칙임.
- 애매한 동사는 피함 (관계된다, 관련이 있다, 이다, 한다 는 구체적이지 않음. 행위와 상태가 있어야함)
- 현재형으로 표현 (수강을 신청했다. 강의를 할 것이다.는 안되고 수강 신청한다. 강의를 한다! 로 표현)
나. 관계차수(Degree/Cardinality)
두 엔티티간 관계에서 참여자의 수를 관계차수(Cardinality)라고 함.
표현 방법은 1:1, 1:M, N:M임
Crow's Foot 모델은 선. 한개가 참여하는 경우는 실선. 다수가 참여하는경우 까마귀발
1) 1:1(one to one)관계 표시

2) 1:M (one to many) 관계 표시

관계를 맺는 다른 엔티티에 대해 하나나 그 이상의 수와 관계를 가짐. 반대의 방향은 단지 하나만의 관계를 가짐.
3) M:M (many to many) 관계 표시

다른 엔티티에 대해 하나나 그 이상의 수와 관계를 가짐. 반대의 방향도 동일하게 각각의 관계를 맺는 엔티티에 대해 하나 또는 그 이상의 수와 관계를 맺음.
이런 모델은 이후에 두 개의 주식별자를 상속받은 관계인티티를 이용하여 33개의 엔티티로 구분하여 표현
다. 관계선택사양(Optionality)
반드시 지하철의 문이 닫혀야만 지하철은 출발한다 = 필수(mandatory) 연결관계 = 필수참여관계
지하철의 출발을 알리는 안내방송, 출발과 방송은 정보로서 관련은 있지만 서로가 필수는 아님 = 선택적인 관계 = 선택참여관계(Optional)
참여하는 엔티티가 항상 참여하는지 아니면 참여할 수도 있는지를 나타내는 방법이 필수(Mandatory Membership)와 선택참여(Optional Membership)임.
필수 참여는 모든 참여자가 반드시 관계를 가지는, 타 엔티티의 참여자와 연결이 되어야 하는 관계. 주문목록이 없는 주문서는 의미가 없으므로 필수참여관계. 상품목록은 주문이 될 수도 있고 되지 않을 수도 있는 선택참여 관계. 선택참여된 항목은 Froeign Key로 연결될 경우 Null을 허용할 수 있는 항목. (데이터 속 선택참여는 Foreign Key다? Null 가능)
선택참여관계를 필수참여로 잘못지정하면 어플리케이션에서 데이터가 발생할 때 반드시 한개의 트랜잭션으로 제어해야하는 제약사항 발생 (선택참여를 필수참여라고 해놓으면 핸디캡주고 하는거랑 마찬가지)
ERD 관계를 나타내는 선에서 선택참여하는 엔티티 쪽을 원으로 표시. 필수참여는 아무런 표시하지 않음.
표시된 양쪽 엔티티가 모두 선택참여가 표시된다면 0:0의 관계가 되므로 잘못될 확률이 높음.

관계선택사양은 관계를 통한 상대방과의 업무적인 제약조건을 표현하는 것으로서 간단하면서 아주 중요한 표기법.
(관계선택사양은 업무를 할때 규칙이나 핸디캡 걸고 합니다~ 라고 알려주는 것이므로 중요하다잉)
4. 관계의 정의 및 읽는 방법
가. 관계 체크사항
- 두 개의 엔티티 사이에 관심있는 연관규칙이 존재하는가?
- 두 개의 엔티티 사이에 정보의 조합이 발생되는가?
- 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?
- 업무기술서, 장표에 관계연결을 가능하게 하는 동사가 있는가?
나. 관계 읽기
데이터 모델을 읽는 방법은 먼저 고나계에 참여하는 기준 엔티티를 하나 또는 각각 읽고 대사 ㅇ엔티티의 개수(하나, 하나이상)를 읽고 관게선택사양과 관계명을 읽도록 함.
- 기준(Source)엔티티를 한개(One) 또는 각(Each)으로 읽는다.
- 대상(Target)엔티티의 관계참여도 즉 개수(하나, 하나 이상)으로 읽는다.
- 관계선택사양과 관계명을 읽는다.

각 사원은 한 부서에 때때로 속한다
각 부서에는 여러 사원이 항상 소속된다
뒷부분만 의문무능로 만들면 관계를 도출하기위한 질문문장.
업무분석하는 자기 스스로에게 질문하거나 고객과 대화를 하면서 관계 완성 가능
이 사원은 한 부서에 대해서만 속합니까?
엔티티간 관계설정 뿐 아니라 업무의 흐름도 분석이 되는 실제 프로젝트에서 효과적인 방법임.
'SQL' 카테고리의 다른 글
| 식별자(Identifiers)에 대해 알아봤습니다. (2) | 2024.07.23 |
|---|---|
| 속성(Attribute)에 대해 알아봤습니다. (0) | 2024.07.23 |
| 엔티티(Entity)에 대해 알아봤습니다. (0) | 2024.07.17 |
| 데이터 모델링의 이해 (1) | 2024.07.17 |
| SQLD 주요내용 (0) | 2024.07.17 |