Introduction

데이터베이스는 현실 세계에서 일어나는 여러가지 상호작용을 논리적으로 나타냅니다. 그 설계를 위하여 여러 데이터 모델이 고안되었고, E-R 모델Entity-Relationship Model은 설계 과정에서 사용되는 대표적인 데이터 모델입니다. 이번 글에서는 이 E-R 모델에 대해 알아봅니다.

Entity, Attribute, Relationship

데이터베이스를 설계하기 위해서는 여러 단계가 필요한데, 그 중 첫번째 단계는 실제 세계의 상호작용을 추상적인 데이터 모델로 표현하는 개념적 스키마Conceptual Schema 단계이다. 이 단계에서 주로 사용하는 것이 바로 E-R 모델Entity-Relationship Model이다. 이 모델에서 사용하는 기본 요소는 크게 세가지로 각각 개체 집합Entity Set, 속성Attribute, 그리고 관계 집합Relationship Set이다.

Relationship

현실에서는 사람, 사물, 개념 등 여러 객체 사이에 어떤 관계가 있을 수 있다. 대학원생에게는 지도교수가 있으며, 이는 대학원생과 교수 간의 관계라고 볼 수 있다. 또한 회사와 사원 사이에는 고용관계가 성립한다. 이러한 현실의 관계는 데이터베이스에서도 똑같이 존재한다. 데이터베이스의 관계Relationship은 여러 객체 사이의 관계로 정의되며, 동일한 유형의 관계를 모은 집합을 관계 집합Relationship Set이라 부른다. 그리고 특정 시점의 데이터베이스를 데이터베이스 인스턴스라 부르듯이 특정 시점의 관계 집합은 관계 인스턴스Relationship Instance라 부른다.

RelationshipInstance
RelationshipInstance

조금 더 엄밀한 정의는 이렇다.

  • nn개의 개체 집합 E1,E2,...,EnE_1, E_2, ..., E_n에 대하여 (e1,e2,...,en)(e_1, e_2, ..., e_n)을 관계 인스턴스라 부르자. 그러면 어떤 관계 집합 RR은 집합 {(e1,e2,...,en)e1E1,e2E2,...enEn}\{(e_1, e_2, ..., e_n)|e_1 \in E_1, e_2 \in E_2, ... e_n \in E_n\}의 부분집합으로 정의된다.
  • 개체 집합들 간의 상호작용은 참여Participation라고 부르며, 개체 집합 E1,E2,...,EnE_1, E_2, ..., E_n은 관계 집합 RR에 참여한다.

Role

어떤 개체가 관계에서 맡는 기능은 그 개체의 역할role이라 부르는데, 관계에 참여하고 있는 개체 집합들은 서로 분명하게 구분되는 것이 일반적이기에 일반적으로 각 개체 집합의 역할을 명시하지는 않지만, 개체 집합 간의 구분이 명확히 되지 않을 때는 이러한 구분이 필요하다.

OneSetRelation
OneSetRelation

위와 같이 하나의 개체 집합만 관계에 참여하는 재귀적 관계 집합Recursive Relationship Set가 대표적인 예시다. 선수先修과목과 같은 관계는 과목이라는 개체 집합만 참여하는 관계라 이를 나타내기 위해 역할 표시자Role Indicator를 추가로 표시하기도 한다.

Degree of The Relationship Set

TenaryRelationship
TenaryRelationship

관계 집합에 참여하는 개체 집합의 수를 관계 집합의 차수Degree of The Relationship Set이라 부른다. 예를 들어 관계 집합에 관련된 개체 집합이 두 개인 이진 관계 집합Binary Relationship Set의 차수는 2고 세 개의 개체 집합이 얽혀있는 삼진 관계 집합Ternary Relationship Set의 차수는 3이다.

Entity Set & Attribute

개체Entity는 실제 세계의 사람이나 사물에 해당하는 개념으로, '사람'이나 '비행기', 혹은 '건물'이나 '강좌'처럼 어떤 범주에 대응한다. 이런 개체들은 여러가지 속성Attribute을 가지는데, 가령 '강좌'라는 개체들은 학생 수, 강의 시간, 담당 교수 등 강좌에 대한 여러 정보를 가지고 있는데, 이 정보들이 각각 하나의 속성이 된다. 이처럼 동일한 종류의 속성을 가지고 있는 개체들의 집합을 개체 집합Entity Set이라 부르고, 실제로 속성이 같은 개체들이 모인 집합을 부를 때는 개체 집합의 확장Extension of The Entity Set이라 부른다.

EntitySet
EntitySet

Value

하나의 속성에는 하나의 값Value이 대응한다. 학생에게는 학번이 있을 것이고 그 학번은 학생마다 다를 텐데, 이를 데이터베이스 상에서 구현한다면 학번 자체는 학생이라는 개체의 속성이 될 것이고 각 학생의 실제 학번은 속성에 대응하는 값이 될 것이다.

Descriptive Attribute

기본적으로 관계의 속성은 그 관계에 참여하고 있는 개체들의 속성으로 이루어져 있지만, 그 외에도 설명 속성Descriptive Attribute이라는 속성이 추가로 존재할 수 있다.

DescriptiveAttribute
DescriptiveAttribute

이 속성은 그 어떤 개체 집합에도 포함되지 않고 오직 특정 관계 집합에서만 존재하는 속성이며, 다이어그램 상에서는 나뉘지 않은 사각형으로 표시되며 관계 집합과 점선으로 연결되어 있다. 예를 들어 관계 집합 takes에는 설명 속성 grade가 있다.

Domain / Value Set

각 속성이 가질 수 있는 값에는 일정한 범위가 있는데, 이것을 도메인Domain 혹은 값 집합Value Set이라 부른다. 이 범위는 일정한 길이의 문자열이 될 수도 있고, 어떤 주제를 가리키는 단어들의 집합이 될 수도 있다.

Composite Attribute

CompositeAttributes
CompositeAttributes

속성이라고 해서 무조건 분리가 불가능한 것은 아니다. 속성은 단순하기도Simple 하지만, 여러가지 속성으로 나눌Composite 수도 있다.

Multivalued Attribute

학생마다 하나씩만 있는 학번처럼 하나의 개체에 대하여 하나의 값을 가지는 속성을 Single-valued Attribute라고 부른다. 하지만 그와 반대로 전화번호 같은 속성의 경우 어떤 사람은 전화번호가 여러 개일 수도 있고, 어떤 사람은 번호가 한 개밖에 없을 수도 있다. 이런 속성은 값이 여러 개라 Multivalued Attribute라고 부른다.

Derived Attribute

속성의 값이 다른 속성이나 개체에서 파생된 경우도 있다. 이런 경우 해당 속성을 파생된 속성Derived Attribute이라 부르며 이런 속성의 값은 저장되지 않지만 필요할 때 다른 속성을 통해 계산할 수 있어야 한다. 예를 들어, 강사라는 개체 집합에 강사가 가르친 학생 수인 students_advised라는 속성이 있다고 가정해보자. 그러면 이 속성을 계산하기 위해서는 해당 개체와 연관된 학생 개체의 수가 얼마나 되는지를 세면 된다.

Null

속성은 Null 값을 가질 수도 있는데, 이는 어떤 개체가 어떤 속성을 가지고 있지만, 그 속성의 값을 가지고 있지 않다는 것을 의미한다. 이는 여러가지 의미가 있다. 널 값은 개체 안에 해당 속성의 값이 존재하지 않는다는 것을 의미할 수도 있고, 해당 속성의 값이 파악되지 않는다는 의미일 수도 있다. 이 경우, 개체는 속성에 대한 값을 분명 가지고 있지만 그 값이 무엇인지 알 수가 없는 상황이거나 속성에 대한 값을 가지고 있는지조차 불투명한 상황이다.


출처

  • Silberschatz, A., Korth, H.F. and Sudarshan, S. (2020) Database system concepts. Seventh edition. New York, NY: McGraw-Hill.