관계란 무엇인가❓
사전적 정의로는 상호 연관성이 있는 상태.
엔터티의 인스턴스 사이의 논리적인 연관성으로 존재의 형태로서나 행위로서 서로에게 연관성이 부여된 상태 즉 엔터티 간의 논리적인 관련성.
각각의 엔터티의 인스턴스들은 자신이 관련된 인스턴스들과 관계의 어커런스로 참여하는 형태를 말한다.
✅ Occurence : 하나의 개체를 개체 어커런스(Entity Occurence)라 한다.
<관계의 패어링 설명>
엔터티가 관계에 참여하는 형태를 지칭하며, 관계는 두 개의 관계명을 가지고 있다. 또한 각각의 관계명에 의해 두 가지의 관점으로 표현될 수 있다.
엔터티에서 관계가 시작되는 편을 관계시작점(The Beginning)이라 부르고 받는 편을 관계끝점(The End)이라 부르고, 관계 시작점과 끝점 모두 관계이름을 가져야 하며 참여자의 관점에 따라 능동적(Active)이거나 수동적(Passive)으로 명명된다.
애매한 동사를 피한다.
예를 들면 '관계된다', '관련이 있다', '이다', '한다' 등은 구체적이지 않아 어떤 행위가 있는지 또는 두 참여자간 어떤 상태가 존재하는지 파악할 수 없다.
현재형으로 표현한다.
예를 들면 '수강을 신청했다', '강의를 할 것이다' 라는 식으로 표현해서는 안 된다.
두 개의 엔터티간 관계에서 참여자의 수를 표현하는 것을 관계차수(Cardinality)라고 한다.
가장 일반적인 관계차수 표현방법은 1:M, 1:1, M:N이다. 가장 중요하게 고려해야 할 사항은 1개의 관계가 존재하느냐 혹은 2개 이상의 멤버쉽이 존재하느냐를 파악하는 것이 중요하다.
Ⅰ. 여러 가지 방법이 있지만 Crow's Foot 모델에서는 선을 이용하여 표현한다.
Ⅱ. 한 개가 참여하는 경우는 실선을 그대로 유지하고 다수가 참여한 경우는 까마귀발 모양으로 그려준다.
<관계차수(1:1)>
<관계차수(1:M)>
<관계차수(M:N)>
필수는 Ⅰ 선택은 O로 표시
필수참여 (Mandatory Membership)
선택참여 (Optional Membership)
❗ 참조 무결성의 제약 조건의 규칙이 이에 따라 바뀌므로 주의 깊게 모델링 해야 한다
❗ 만약 관계가 표시된 양 쪽 엔터티에 모두 선택참여가 표시된다면, 즉 0:0 관계라면 잘못 설정된 관계인지 검토해야 한다.
존재 관계
행위 관계
연관관계(association) : 항상 이용하는 관계, 존재적 관계, 실선, 소스코드에서 멤버변수로 선언하여 사용한다.
의존관계(dependency) : 상대방 클래스의 행위에 의해 관계가 형성될 때 구분하여 표현, 점선, operation에서 파라미터로 사용한다
식별 관계(Identification Relationship)
고객과 계좌 엔터티에서 고객은 독립적으로 존재할 수 있는 강한 개체(Strong Entity)
강한 개체는 어떤 다른 엔터티에게 의존하지 않고 독립적으로 존재한다.
강한 개체는 다른 엔터티와 관계를 가질 때 다른 엔터티에게 기본키를 공유 한다.
강한 개체는 식별 관계로 표현 된다.
강한 개체의 기본키 값이 변경되면 식별관계(기본키를 공유받은)에 있는 엔터티의 값도 변경 된다.
실선으로 표현한다.
비식별 관계(Non-Identification Relationship)
비식별 관계는 강한 개체의 기본키를 다른 엔터티의 기본키가 아닌 일반 칼럼으로 관계를 가지는 것이다.
관리점 엔터티의 기본키는 지점 코드이고 고객 엔터티와 비식별 관계를 가지고 있다 즉 지점코드는 고객 엔터티의 기본키가 아닌 일반 칼럼으로 참조 된다.
점선으로 표현한다.
두 개의 엔터티 사이에서 관계를 정의할 때 다음 사항을 체크한다.
연관규칙이 존재하는가?, 정보의 조합이 발생되는가?, 관계연결에 대한 규칙이 서술되었는가?
관계연결을 가능하게 하는 동사가 있는지 확인한다.
관계에 참여하는 기준 엔티티를 하나 또는 각(each)로 읽는다.
대상 엔티티의 관계참여도(개수)를 읽는다.
관계선택사양과 관계명을 읽는다.