[SQLD] 데이터 모델링의 이해 - 관계, 식별자 요약

 

1. 관계의 개념

관계의 정의

"엔터티의 인스턴스 사이의 논리적인 연관성으로서, 존재의 형태로서나 행위로서 서로에게 연관성이 부여된 상태" 라고 할 수 있다. 관계(Relationship)는 엔터티와 엔터티 간 연관성을 표현하기 때문에 엔터티의 정의에 따라 영향을 받기도 하고, 속성 정의 및 관계 정의에 따라서도 다양하게 변할 수 있다.

 

관계의 패어링

관계는 엔터티 안에 인스턴스가 개별적으로 관계를 가지는 것(패어링)이고, 이것의 집합을 관계로 표현하는 것을 유의해야 한다. 따라서 개별 인스턴스가 각각 다른 종류의 관계를 가지고 있다면 두 엔터티 사이에 두 개 이상의 관계가 형성될 수 있다.

 

각각의 엔터티의 인스턴스들은 자신이 관련된 인스턴스들과 관계의 어커런스로 참여하는 형태를 관계 패어링(Relationship Paring)이라고 한다. 

 

엔터티는 인스턴스의 집합을 논리적으로 표현한 것이였다면, 관계는 관계 패어링의 집합을 논리적으로 표현하는 것이다.


2. 관계의 분류

존재에 의한 관계

이 관계는 단순히 엔터티들이 서로 연결되어 있음을 나타낸다. 예를 들어, 황경빈이라는 사원이 DB팀에 소속된 경우, 이는 황경빈 사원이 DB팀의 일원이라는 존재의 관계를 나타낸다. 여기서 '소속된다'는 행위가 아닌, 단순히 사원이 팀에 속해있다는 상태를 표현한다.

 

행위에 의한 관계

이 관계는 특정 행위나 이벤트에 의해 형성다. 예를 들어, 김경재 고객이 '주문한다'는 행위를 통해 CTA201이라는 주문번호를 생성하는 경우, 이 관계는 김경재 고객과 주문 엔터티 사이의 행위에 의한 관계로 간주된다.

 

UML에서의 연관관계와 의존관계

UML의 클래스 다이어그램에서는 이러한 관계를 두 가지로 나누어 표현한다.

 

연관관계(Association)

이는 엔터티들이 항상 서로 관련되어 있는 존재적 관계를 나타낸다. 연관관계는 실선으로 표현되며, 클래스의 멤버 변수로 선언되어 사용된다.

 

의존관계(Dependency)

이는 한 클래스가 다른 클래스의 행위에 의존하는 관계를 나타낸다. 의존관계는 점선으로 표현되며, 클래스의 메소드(Operation) 내에서 파라미터 등으로 사용된다.


3. 관계의 표기법

관계에서는 표기법이 상당히 복잡하고 여러 의미를 가지고 있다. 때문에 아래 3가지 개념과 함께 표기법을 이해할 필요가 있다.

1. 관계명(Membership) : 관계의 이름
2. 관계 차수(Cardinality) : 1:1, 1:M, N:M
3. 관계 선택 사양(Optionality) : 필수 관계, 선택 관계

 

관계명(Membership)

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

엔터티에서 관계가 시작되는 편을 "관계 시작점(The Beginning)", 받는 편을 "관계 끝점(The End)"라 한다. 시작점과 끝점은 모두 관계명을 가져야 하며 관점에 따라 능동적이거나 수동적으로 명명된다. 관계명은 다음과 같은 명명규칙에 따라 작성해야 한다.

1. 애매한 동사를 피한다.
2. 현재형으로 표현한다.

 

관계 차수(Degree/Cardinality)

두 개의 엔터티 간에 관계에서 참여자의 수를 표현하는 것을 관계차수(Cardinality)라고 한다. 일반적으로 1:1, 1:M, N:M 으로 표현한다.

 

1:1(One To One) 관계 표시

 

1:M (One To Many) 관계 표시

 

N:M (Many To Many) 관계 표시

 

관계 선택 사양(Optionality)

지하철이 출발할 때 문이 반드시 닫혀야만 출발한다. 때문에 지하철 출발, 지하철 문 닫힘은 필수(Mandatory)적으로 연결 관계가 있다. 이를 필수 참여 관계(Mandatory) 라고 한다. 지하철 출발할 때 나오는 안내방송을 생각해보면 지하철 출발, 출발 안내 방송은 관련은 있지만 필수적인 요소는 아니다. 이런 경우 선택적인 관계(Optional)이라고 한다.

 

필수참여관계

이 관계는 한 엔터티가 다른 엔터티 없이는 존재할 수 없는 경우에 설정된다. 예를 들어, 지하철이 출발하기 전에 문이 닫혀야 하는 경우처럼, 두 엔터티 간에 필수적으로 연결되어야 하는 상황이다. 다른 예로, 주문서와 주문목록의 관계는 필수참여 관계이며, 주문목록이 없는 주문서는 의미가 없다.

 

선택참여관계

이 관계는 한 엔터티가 다른 엔터티 없이도 존재할 수 있는 경우에 설정된다. 예를 들어, 지하철의 안내방송은 지하철 출발과는 직접적인 필수적 연결이 없는 관계이다. 선택참여 관계에서는 한 엔터티가 다른 엔터티와의 연결 없이 독립적으로 존재할 수 있으며, 이 경우 외래 키는 Null 값을 가질 수 있다.

 

ERD에서의 표현방법

ERD(엔터티 관계 다이어그램)에서 필수참여 관계는 아무런 특별한 표시 없이 나타내며, 선택참여 관계는 관계 선에서 선택참여하는 엔터티 쪽에 원으로 표시한다.


4. 관계 정의 및 읽는 방법

관계 정의시 체크 리스트

두 개의 엔터티 사이에서 관계를 정의할 때는 아래 사항을 체크해야 한다.

1. 두 개의 엔터티 사이에 연관규칙이 존재하는지 체크
2. 두 개의 엔터티 사이에 정보의 조합이 발생하는지 체크
3. 업무기술서 및 장표에 관계 연결에 대한 규칙이 서술되어 있는지 체크
4. 업무기술서 및 장표에 관계 연결을 가능하게 하는 동사가 있는지 체크

 

관계 읽기

기준(Source) 엔터티 읽기

데이터 모델을 해석할 때, 먼저 '기준 엔터티'를 확인한다. 이는 관계에서 출발하는 엔터티를 말하며, '하나(one)' 또는 '각(each)'의 관점에서 읽는다. 예를 들어, '주문(Order)' 엔터티를 기준으로 삼을 수 있다.

 

대상(Target) 엔터티의 관계참여도 읽기

다음으로 '대상 엔터티'와 그것이 관계에 참여하는 방식(예: 하나, 하나 이상)을 파악한다. 예를 들어, '제품(Product)' 엔터티가 주문 엔터티와 어떻게 연결되는지를 살펴본다.

 

관계선택사양과 관계명 읽기

관계선택사양(Mandatory 또는 Optional)과 관계명을 확인한다. 이는 두 엔터티 간의 연결이 얼마나 필수적인지, 또는 어떤 의미를 가지는지를 나타낸다.

 

질문을 통한 관계 도출

관계를 이해하기 위해 질문 문장을 만들어 사용한다. 예를 들어, "한 주문에 대해서 하나의 제품만을 주문하나?" 또는 "한 제품은 하나의 주문에 대해서만 주문을 접수받나요"와 같은 질문으로 관계를 분석할 수 있다.


5. 식별자 개념

하나의 엔터티에 구성되어 있는 여러 개의 속성 중에 엔터티를 대표할 수 있는 속성을 의미한다. 하나의 엔터티는 반드시 하나의 유일한 식별자가 존재해야 한다.

 

주식별자

1. 주식별자에 의해 엔터티내에 모든 인스턴스들이 유일하게 구분되어야 한다.
2. 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다.
3. 지정된 주식별자의 값은 자주 변하지 않는 것이어야 한다.
4. 주식별자가 지정이 되면 반드시 값이 들어와야 한다.
특징 내용 예시
유일성 주식별자에 의해 엔터티내에 모든 인스턴스들을 유일하게 구분해야 한다. 사원번호가 주식별자가 되어 모든 직원들에게 개인별로 고유하게 부여됨
최소성 주식별자를 구성하는 속성의 수는 유일성을 만족하는 최소의 수가 되어야 한다. 사원번호만으로도 고유한 구조인데, 사원분류 코드 + 사원번호로 식별자가 구성될 경우 부적절한 주식별자 구조가 된다.
불변성 주식별자가 한 번 특정 엔터티에 지정되면 그 식별자의 값은 변하지 않아야 한다. 사원번호의 값이 변한다는 의미는 이전기록이 말소되고 새로운 기록이 발생된다는 의미로 이런 상황이 생기면 안된다.
존재성 주식별자가 지정되면 반드시 데이터 값이 존재해야 한다.(Not Null) 사원번호가 없는 직원이 데이터로 존재하면 안된다.

 

외부식별자

외부식별자는 한 엔터티(또는 테이블)에서 다른 엔터티의 주식별자(Primary Key)를 참조하는 속성이다. 이것은 데이터베이스의 두 테이블 사이의 관계를 정립하는 데 사용된다. 외부식별자는 참조하는 주식별자의 값과 일치해야 한다. 

 

예를 들어, '주문' 엔터티의 외부식별자는 '고객' 엔터티의 주식별자를 참조할 수 있으며, 이는 '주문'이 특정 '고객'에 속함을 나타낸다.

 

참조무결성 제약조건(Referential Integrity)

이는 데이터베이스의 일관성과 정확성을 유지하기 위한 중요한 규칙이다. 참조무결성은 외부식별자가 참조하는 주식별자가 실제로 존재하는지를 보장한다. 즉, 어떤 테이블의 외부식별자 필드가 다른 테이블의 주식별자를 참조한다면, 그 외부식별자 값은 반드시 참조되는 테이블의 주식별자 값 중 하나와 일치해야 한다.


6. 식별자의 분류 및 표기

분류 식별자 설명
대표성 여부 주식별자 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이며, 타 엔터티와 참조관계를 연결할 수 있는 식별자
보조식별자 엔터티 내에서 각 어커런스를 구분할 수 있는 구분자이나, 대표성을 가지지 못해 참조관계 연결을 못하는 식별자
스스로 생성여부 내부식별자 엔터티 내부에서 스스로 만들어지는 식별자
외부식별자 타 엔터티와의 관계를 통해 타 엔터티로부터 받아오는 식별자
속성의 수 단일식별자 하나의 속성으로 구성된 식별자
복합식별자 둘 이상의 속성으로 구성된 식별자
대체 여부 본질식별자 업무에 의해 만들어지는 식별자
인조식별자 업무에적으로 만들어지진 않지만 원조식별자가 복잡한 구성이기 때문에 인위적으로 만든 식별자