[SQL] 관계(Relationship)
관계의 개념
관계의 정의
관계를 사전적으로 정의하면 상호 연관성이 있는 상태로 말할 수 있다. 이것을 데이터 모델에 대입하여 정의하면, ‘엔터티의 인스턴스 사이의 논리적인 연관성으로서 존재의 형태로서나 행위로서 서로에게 연관성이 부여된 상태’ 또는 ‘관계 패어링의 집합을 논리적으로 표현한 것’ 이라고 할 수 있다.
관계는 엔터티와 엔터티 간 연관성을 표현하기 떄문에 엔터티의 정의에 따라 영향을 받기도 하고, 속성 정의 및 관계 정의에 따라서도 다양하게 변할 수 있다.
관계의 패어링
관계에서 패어링이란 각각의 엔터티의 인스턴스들이 자신과 관련된 인스턴스들과 관계의 어커런스로 참여하는 형태를 말한다. 유의해야 할 점은 관계는 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것(패어링)이고, 이것의 집합을 관계로 표현한다는 것이다. 따라서 개별 인스턴스가 각각 다른 종류의 관계를 가지고 있다면, 두 엔터티 사이에 두개 이상의 관계가 형성될 수 있다.
최초의 ERD에서 관계는 속성을 가질 수 있었으나, 요즘 ERD에서는 관계를 위해 속성 도출을 하진 않는다. 관계의 표현에는 이항 관계, 삼항 관계, n항 관계가 존재할 수 있는데 실제에 있어서 삼항 관계 이상은 잘 나타나지 않는다.
관계의 분류
관계의 분류는 다음과 같다.
- 존재에 의한 관계(연관관계)
- 행위에 의한 관계(의존관계)
관계의 표기법
관계에서는 표기법이 상당히 복잡하고 여러 가지 의미를 가지고 있다. 아래 3가지 개념과 함께 표기법을 이해해보자.
- 관계명
엔터티가 관계에 참여하는 형태를 지칭한다. 각각의 관계는 두개의 관계명을 가지고있다. 또한 각각의 관계명에 의해 두 가지의 관점으로 표현될 수 있다.
관계명엔터티에서 관계가 시작되는 편을 관계시작점이라고 부르고, 받는 편을 관계끝점이라고 부른다. 관계 시작점과 끝점 모두 관계이름을 가져야 하며, 참여자의 관점에 따라 관계이름이 능동적이거나 >수동적으로 명명된다. 관계명은 다음과 같은 명명규칙에 따라 작성해야 한다.
- 애매한 동사를 피한다. 예를 들어 ‘관계된다’, ‘관련이 있다’, ‘이다’, ‘한다’ 등은 구체적이지 않아 어떤 행위가 있는지 또는 두 참여자 간 어떤 관계가 있는지 파악할 수 없다.
- 현재형으로 표현한다. 예를 들어 ‘수강을 신청했다’, ‘강의를 할 것이다’ 라는 식의 표현은 안된다. ‘수강 신청한다’, ‘강의를 한다’ 로 표현해야 한다.
- 관계차수
두 개의 엔터티간 관계에서 참여자의 수를 표현하는 것을 관계차수라고 한다. 가장 일반적인 관계차수 표현방법은 1:M, 1:1, M:N이다. 가장 중요하게 고려해야 할 사항은 한 개의 관계가 존재하느냐 >아니면 두 개 이상의 멤버십이 존재하는지를 파악하는 것이 중요하다.
관계차수를 표시하는 방법은 여러 가지가 있지만, Crow’s Foot 모델에서는 선을 이용하여 표현한다. 한 개가 참여하는 경우는 실선을 그대로 유지하고, 다수가 참여한 경우는 까마귀발과 같은 모양으로 그려준다.
1) 1:1 관계차수
관계에 참여하는 각각의 엔터티는 관계를 맺는 다른 엔터티의 엔터티에 대해 단지 하나의 관계만을 가지고 있다.
2) 1:M 관계차수
관계에 참여하는 각각의 엔터티는 관계를 맺는 다른 엔터티의 엔터티에 대해 하나 또는 그 이상의 수와 관계를 가지고 있다. 그러나 반대의 방향은 단지 하나만의 관계를 가지고 있다.
3) M:M 관계차수
관계에 참여하는 각각의 엔터티는 관계를 맺는 다른 엔터티의 엔터티에 대해 하나나 그 이상의 수와 관계를 가지고 있다. 반대의 방향도 동일하게 관계에 참여하는 각각의 엔터티는 관계를 맺는 다른 엔터티의 엔터티에 대해 하나 또는 그 이상의 수와 관계를 가지고 있다.
이렇게 M:N관계로 표현된 데이터 모델은 이후에 두개의 주식별자를 상속받은 관계엔터티를 이용하여 3개의 엔터티로 구분하여 표현한다. - 관계선택사양
관계에는 참여하는 엔터티가 항상 참여하는 필수참여관계와 참여여부가 주어지는 선택참여관계가 있다.
- 필수참여관계
필수참여관계는 참여하는 모든 참여자가 반드시 관계를 가지는, 타 엔터티의 참여자와 연결되어야 하는 관계이다. 예를 들어 주문서는 반드시 주문목록을 가져야 하며 주문목록이 없는 주문서는 의미가 없으므로 주문서와 주문목록은 필수참여관계가 되는 것이다.
- 선택참여관계
선택참여관계는 모든 참여자가 반드시 관계를 가지는 것이 아닌 관계이다. 예를 들어 목록은 주문이 될 수도 있고, 주문되지 않을 수도 있으므로 목록과 주문목록과의 관계는 선택참여관계가 된다.
관계의 정의 및 읽는 방법
관계 체크사항
두 개의 엔터티 사이에서 관계를 정의할 때 다음 사항을 체크해 본다.
- 두 개의 엔터티 사이에 관심 있는 연관규칙이 존재하는가?
- 두 개의 엔터티 사이에 정보의 조합이 발생하는가?
- 업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?
- 업무기술서, 장표에 관계연결을 가능하게 하는 동사가 있는가?
관계 읽기
데이터 모델을 읽는 방법은 다음과 같다.
- 기준 엔터티를 한개 또는 각각 읽는다.
- 대상 엔터티의 관계참여도, 즉 개수를 읽는다.
- 관계선택사양과 관계명을 읽는다.
읽어주셔서 감사합니다. 😊
Reference
SQL 전문가 가이드 - Kdata 한국데이터산업진흥원







