[SQLD] 관계

박진우·2022년 5월 21일
0

SQLD

목록 보기
3/21
post-thumbnail

💡 관계

관계란 무엇인가❓

  • 사전적 정의로는 상호 연관성이 있는 상태.

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


◽ 관계의 패어링

각각의 엔터티의 인스턴스들은 자신이 관련된 인스턴스들과 관계의 어커런스로 참여하는 형태를 말한다.
✅ Occurence : 하나의 개체를 개체 어커런스(Entity Occurence)라 한다.

<관계의 패어링 설명>


◽ 관계 표기법

1) 관계명(Membership) : 관계의 이름

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


엔터티에서 관계가 시작되는 편을 관계시작점(The Beginning)이라 부르고 받는 편을 관계끝점(The End)이라 부르고, 관계 시작점과 끝점 모두 관계이름을 가져야 하며 참여자의 관점에 따라 능동적(Active)이거나 수동적(Passive)으로 명명된다.

▪ 관계의 명명 규칙

  • 애매한 동사를 피한다.

    예를 들면 '관계된다', '관련이 있다', '이다', '한다' 등은 구체적이지 않아 어떤 행위가 있는지 또는 두 참여자간 어떤 상태가 존재하는지 파악할 수 없다.

  • 현재형으로 표현한다.

    예를 들면 '수강을 신청했다', '강의를 할 것이다' 라는 식으로 표현해서는 안 된다.


2) 관계 차수(Cardinality,Degree) : 1:1, 1:M, M:N

두 개의 엔터티간 관계에서 참여자의 수를 표현하는 것을 관계차수(Cardinality)라고 한다.

가장 일반적인 관계차수 표현방법은 1:M, 1:1, M:N이다. 가장 중요하게 고려해야 할 사항은 1개의 관계가 존재하느냐 혹은 2개 이상의 멤버쉽이 존재하느냐를 파악하는 것이 중요하다.

▪ 관계차수를 표시하는 방법

Ⅰ. 여러 가지 방법이 있지만 Crow's Foot 모델에서는 선을 이용하여 표현한다.
Ⅱ. 한 개가 참여하는 경우는 실선을 그대로 유지하고 다수가 참여한 경우는 까마귀발 모양으로 그려준다.
  • 1:1(ONE TO ONE)

    <관계차수(1:1)>
  • 1:M(ONE TO MANY)

    <관계차수(1:M)>
  • M:M(MANY TO MANY)

    <관계차수(M:N)>

3) 관계 선택사항(Optionality) :

 필수는 Ⅰ 선택은 O로 표시
  • 필수참여 (Mandatory Membership)

    • 참여하는 모든 참여자가 반드시 관계를 가지는, 타 엔터티의 참여자와 연결이 되어야 하는 관계

  • 선택참여 (Optional Membership)

    • 정보로서 관련은 있지만, 서로가 필수적인 관계는 아닌 관계
    • Foreign Key로 연결된 경우 Null 을 허용할 수 있는 항목이 된다.

    ❗ 참조 무결성의 제약 조건의 규칙이 이에 따라 바뀌므로 주의 깊게 모델링 해야 한다

    ❗ 만약 관계가 표시된 양 쪽 엔터티에 모두 선택참여가 표시된다면, 즉 0:0 관계라면 잘못 설정된 관계인지 검토해야 한다.



◽ 관계의 종류

  • 존재 관계

    • 엔터티 간의 상태를 의미한다.
    • 두 개의 엔터티가 존재 여부의 관계 가 있는 것.

  • 행위 관계

    • 엔터티 간에 어떤 행위가 있는 것
    • 두 개의 엔터티가 어떤 행위에 의한 관련성 이 있는 것



UML(Unified Modeling Language) 기준

  • 연관관계(association) : 항상 이용하는 관계, 존재적 관계, 실선, 소스코드에서 멤버변수로 선언하여 사용한다.

  • 의존관계(dependency) : 상대방 클래스의 행위에 의해 관계가 형성될 때 구분하여 표현, 점선, operation에서 파라미터로 사용한다


식별 관계와 비식별 관계

  • 식별 관계(Identification Relationship)

    • 고객과 계좌 엔터티에서 고객은 독립적으로 존재할 수 있는 강한 개체(Strong Entity)

    • 강한 개체는 어떤 다른 엔터티에게 의존하지 않고 독립적으로 존재한다.

    • 강한 개체는 다른 엔터티와 관계를 가질 때 다른 엔터티에게 기본키를 공유 한다.

    • 강한 개체는 식별 관계로 표현 된다.

    • 강한 개체의 기본키 값이 변경되면 식별관계(기본키를 공유받은)에 있는 엔터티의 값도 변경 된다.

    • 실선으로 표현한다.


  • 비식별 관계(Non-Identification Relationship)

    • 비식별 관계는 강한 개체의 기본키를 다른 엔터티의 기본키가 아닌 일반 칼럼으로 관계를 가지는 것이다.

    • 관리점 엔터티의 기본키는 지점 코드이고 고객 엔터티와 비식별 관계를 가지고 있다 즉 지점코드는 고객 엔터티의 기본키가 아닌 일반 칼럼으로 참조 된다.

    • 점선으로 표현한다.


◽ 관계의 정의 및 읽는 방법

1) 관계 체크사항

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

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

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

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

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

2) 관계 읽기

  • 연관규칙이 존재하는가?, 정보의 조합이 발생되는가?, 관계연결에 대한 규칙이 서술되었는가?

  • 관계연결을 가능하게 하는 동사가 있는지 확인한다.

  • 관계에 참여하는 기준 엔티티를 하나 또는 각(each)로 읽는다.

  • 대상 엔티티의 관계참여도(개수)를 읽는다.

  • 관계선택사양과 관계명을 읽는다.

0개의 댓글