1. 관계의 개념
가. 관계의 정의
- 관계 (Relationship)을 사전적으로 정의하면 상호 연관성이 있는 상태
- 데이터 모델에서 관계는 `엔터티 인스턴스들 사이에 논리적 연관성을 부여하는 것으로, 이는 존재의 상태나 특정 행위의 형태`
나. 관계의 페어링
- 관계는 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것 (페어링)이고, 이 것의 집합을 관계로 표현한다는 것
- 엔터티 내에 인스턴스와 인스턴스 사이에 관계가 설정된 occurrence를 관계 페어링이라고 함
- 엔터티가 인스턴스의 집합을 논리적으로 표현했다면, 관계는 관계 페어링의 집합을 논리적으로 표현한 것
- 개별 인스턴스가 각각 다른 종류의 관계를 가지고 있을 경우 두 엔터티 사이에 두 개 이상의 관계가 형성될 수 있음
2. 관계의 분류
- 관계를 연결함에 있어 어떤 목적으로 연결되었느냐에 따라 분류하기 때문에 다음과 같이 분류할 수 있음
- 존재에 의한 관계
- 행위에 의한 관계
- UML (Unified Modeling Language)에는 클래스 다이어그램의 관계 중 연관 관계 (Association)와 의존 관계 (Dependency)가 있음
- 연관 관계는 항상 이용하는 관계로 존재적 관계에 해당
- 의존 관계는 상대방 클래스의 행위에 의해 관계가 형성될 때 구분하여 표현한다는 것
- ERD에서는 존재적 관계와 행위에 의한 관계를 표현했다면, 클래스 다이어그램에서는 이 것을 구분하여 연관 관계와 의존 관계로 표현하고 있음
부연 설명
- 연관관계(Association)
- Customer와 Order 사이의 선은 “고객-주문”이라는 구조적 연관(association)을 나타냄
- 이처럼 클래스 다이어그램의 연관관계는 객체 (또는 클래스)가 서로 속성이나 참조를 통해 직접 연결되는 “존재적 관계”를 의미
- Order와 Item 사이에 보이는 마름모(◆)는 “합성(composition)” 관계로, Order가 Item을 소유하며 객체 생명주기를 공유한다는 점을 나타냄
- 의존관계(Dependency)
- 의존관계는 한 클래스가 다른 클래스의 메서드를 호출하거나, 객체를 잠시 참조하는 등 “행위(behavior)에 의해 발생하는 일시적 의존성”을 의미
- 클래스 다이어그램에서는 점선 화살표로 나타내며, 예를 들어 Order 클래스의 메서드들이 Item이나 Product 객체를 매개변수 형태로 사용할 때 생길 수 있음
- ERD에서는 주로 엔티티 간 존재적 관계만 다루기 때문에, 이런 메서드 의존성이나 임시 참조 관계는 보통 나타나지 않음
3. 관계의 표기법
- 관계 표기법은 복잡하고 다양한 의미를 지니므로, 이를 올바로 이해하기 위해서는 아래 3가지 개념과 함께 살펴봐야 함
- 관계명 (Membership): 관계의 이름
- 관계 차수 (Cardinality): 1:1, 1:M, M:N
- 관계 선택사양 (Optionality): 필수 관계, 선택 관계
가. 관계명
- 관계명은 엔티티가 관계에 참여하는 형태를 지칭
- 각각의 관계는 두 개의 관계명을 가지고 있으며 각각의 관계명에 의해 두 가지의 관점으로 표현될 수 있음
- 관계명은 다음과 같은 명명규칙에 따라 작성해야 함
- '관계된다', '관련이 있다'와 같은 애매한 동사를 피함
- '수강을 신청했다'와 같은 과거형 대신 '수강을 신청했다'와 같이 현재형으로 표현
나. 관계 차수
- 두 개의 엔터티 간 관계에서 참여자의 수를 표현하는 것을 관계 차수라고 함
- 가장 일반적인 관계 차수 표현 방법은 1:1, 1:M, 그리고 M:N
- 한 개의 관계가 존재하느냐 아니면 두 개 이상의 관계가 존재하는지를 파악하는 것이 중요
부연 설명
- M:N 관계로 표현된 데이터 모델은 이후에 두 개의 주식별자를 상속받은 관계 엔터티를 이용하여 3개의 엔터티로 구분하여 표현 (JPA의 @ManyToMany도 이와 같은 방식으로 자동 스키마 생성)
다. 관계 선택사양
- 데이터 모델링에서 엔터티들은 서로 관계를 맺고 있는데, 어떤 엔터티가 특정 관계에서 반드시 참여해야 하는지 여부를 표시하는 개념이 있음
- 이를 크게 필수 참여 관계와 선택적 참여 관계로 나누어 설명할 수 있음
- 필수 참여 관계 (Mandatory): 엔터티의 모든 인스턴스가 해당 관계에 반드시 참여해야 함을 의미
- ex) `학생(Student) - 학적(Enrollment)` 관계에서, 모든 학생이 최소 하나 이상의 학적 정보를 반드시 가져야 한다고 가정할 수 있으며 이 경우 학생 엔터티 인스턴스는 해당 관계에 필수적으로 참여하는 것으로 볼 수 있음
- 선택적 참여 관계 (Optional): 엔터티 인스턴스가 해당 관계에 참여하지 않아도 되며, 참여 여부가 자유로움
- ex) `임직원(Employee) - 보너스(Bonus)` 관계를 설정할 때, 모든 임직원이 반드시 보너스를 받아야 하는 것은 아니라면, 임직원 엔터티의 보너스 관계는 선택적 참여
- 선택 참여된 항목은 물리 속성에서 외래 키로 연결된 경우, Null을 허용할 수 있는 항목이 됨
- 만약 선택 참여로 지정해야 할 관계를 필수 참여로 잘 못 지정하면 애플리케이션에서 데이터가 발생할 때 반드시 한 개의 트랜잭션으로 제어해야 하는 제약사항이 발생하기 때문에 설계 단계에서 필수 참여와 선택 참여 여부를 고려해야 함
4. 관계의 정의 및 읽는 방법
가. 관계 체크사항
- 두 개의 엔터티 사이에서 관계를 정의할 때 다음 사항을 체크해야 함
- 두 개의 엔터티 사이 관심 있는 연관규칙 존재 여부
- 두 개의 엔터티 사이 정보 조합 발생 여부
- 업무기술서, 장표에 관계 연결에 대한 규칙 서술 여부
- 업무기술서, 장표에 관계 연결을 가능하게 하는 동사 여부
나. 관계 읽기
- 데이터 모델을 해석할 때는 먼저 관계에 참여하는 기준 엔터티를 ‘하나’ 또는 ‘각(Each)’으로 인지한 후, 대상 엔터티의 개수를 파악하고, 이어서 관계의 선택사양과 관계명을 확인
- 기준 (Source) 엔터티를 한 개 또는 각 (Each)으로 읽음
- 대상 (Target) 엔터티의 관계 참여도, 즉 개수를 읽음
- 곤계 선택사양과 관계명을 읽음
참고
SQL 전문가 가이드 2020 개정판 - 한국데이터산업진흥원
반응형
'DB > SQL 전문가 가이드' 카테고리의 다른 글
[과목 I 2장 1절] 정규화 (0) | 2025.03.17 |
---|---|
[과목 I 1장 5절] 식별자 (0) | 2025.02.23 |
[과목 I 1장 3절] 속성 (0) | 2025.02.22 |
[과목 I 1장 2절] 엔터티 (0) | 2025.02.22 |
[과목 I 1장 1절] 데이터 모델의 이해 (1) | 2025.02.22 |