Back to Blog
DBE-R ModelEntityRelationshipDatabase Design

0x06. E-R 모델 - 개체-관계 데이터 모델링

데이터베이스 설계의 핵심 도구인 E-R 모델을 다룬다. Entity, Relationship, Attribute의 개념부터 Mapping Cardinality, Weak Entity, 그리고 E-R 모델을 Relation Schema로 변환하는 방법까지 정리한다.

데이터베이스 설계 과정

데이터베이스를 설계한다는 것은 현실 세계의 정보를 어떻게 구조화할지 결정하는 일이다. 이 과정은 크게 세 단계로 나뉜다.

첫 번째 단계에서는 데이터베이스 사용자의 관점에서 데이터 요구사항을 완전히 파악한다. 어떤 데이터가 필요한지, 누가 어떤 목적으로 사용하는지를 분석하는 것이다.

두 번째 단계에서는 데이터 모델을 선택하고, 해당 모델의 개념을 적용하여 요구사항을 Conceptual Schema로 변환한다. 이 단계에서 완성된 Conceptual Schema는 어떤 SQL 쿼리가 필요한지, 어떤 애플리케이션 기능이 요구되는지 등 시스템의 **기능적 요구사항(Functional Requirements)**을 반영한다.

세 번째 단계에서는 추상적인 데이터 모델을 실제 구현으로 옮긴다. 이 단계는 다시 두 가지로 나뉜다.

  • Logical Design: 데이터베이스 스키마를 결정하는 단계다. 어떤 Attribute를 기록할 것인지(비즈니스 판단), 어떤 Relation Schema를 구성하고 Attribute를 어떻게 분배할 것인지(기술적 판단)를 결정한다.
  • Physical Design: 데이터베이스의 물리적 레이아웃을 결정한다. SQL DDL로 실제 테이블을 생성하는 단계이다.

잘못된 설계의 두 가지 함정

데이터베이스 스키마를 설계할 때 반드시 피해야 할 두 가지 문제가 있다.

Redundancy(중복): 나쁜 설계는 동일한 정보가 여러 곳에 반복 저장되는 결과를 낳는다. 중복된 정보는 한쪽만 수정되고 다른 쪽은 그대로 남는 데이터 불일치(Data Inconsistency) 문제로 이어진다.

Incompleteness(불완전성): 나쁜 설계는 기업의 특정 측면을 모델링하기 어렵거나 아예 불가능하게 만들 수 있다.

E-R Model과 Normalization

이러한 문제를 방지하면서 좋은 데이터베이스를 설계하기 위한 대표적인 도구가 바로 **Entity-Relationship Model(E-R 모델)**이다. E-R Model은 현실 세계를 EntityRelationship의 집합으로 모델링하며, 이를 시각적으로 표현한 것이 E-R Diagram이다. E-R Diagram은 데이터베이스의 전체 구조를 한눈에 파악할 수 있게 해준다.

또 다른 접근법으로 Normalization Theory가 있으며, 이는 이후 별도로 다룬다.


E-R Diagram의 구성 요소

E-R 데이터 모델은 세 가지 핵심 개념을 사용한다: Entity Set, Relationship Set, Attribute. E-R Diagram은 이 요소들을 활용하여 데이터베이스의 전체 논리 구조를 그래픽으로 표현한다.

Entity Set

Entity는 다른 객체와 구별 가능한 하나의 **객체(Object)**이며, Attribute의 집합으로 표현된다. 예를 들어, "학생"이라는 Entity는 학번, 이름, 학점 등의 Attribute로 표현할 수 있다.

Entity Set은 같은 타입의 Entity들이 동일한 속성을 공유하며 모인 집합이다. Entity Set의 Attribute 중 일부는 Primary Key를 구성하여, 집합 내의 각 Entity를 고유하게 식별하는 역할을 한다.

Relationship Set

Relationship은 여러 Entity 간의 연관관계이다. Relationship Set은 Entity Set들 사이의 수학적 관계를 나타내며, Relationship Set 자체도 Attribute를 가질 수 있다.

Entity가 Relationship에서 수행하는 기능을 Role이라 한다. 예를 들어, "advisor" Relationship에서 교수는 "지도교수" 역할을, 학생은 "피지도 학생" 역할을 수행한다.

Binary Relationship은 두 개의 Entity Set을 포함하는 관계이며(차수 2), Ternary Relationship처럼 세 개 이상의 Entity Set이 관여하는 관계도 가능하지만 드물다.

Complex Attributes

Attribute는 다양한 유형으로 분류된다.

  • Simple vs. Composite Attribute: Simple Attribute는 더 이상 분해할 수 없는 단일 값이고, Composite Attribute는 여러 하위 Attribute로 구성된다. 예를 들어, "주소"는 "도시", "거리", "우편번호" 등으로 분해할 수 있는 Composite Attribute이다.
  • Single-valued vs. Multivalued Attribute: Single-valued Attribute는 하나의 값만 가지고, Multivalued Attribute는 여러 값을 가질 수 있다. 예를 들어, 한 사람이 여러 전화번호를 가질 수 있으므로 phone_number는 Multivalued Attribute이다.
  • Derived Attribute: 다른 Attribute로부터 계산되어 도출되는 Attribute이다. 예를 들어, 생년월일로부터 나이를 계산할 수 있다.

Mapping Cardinality

Binary Relationship Set에서 Mapping Cardinality는 한쪽 Entity가 상대 Entity와 몇 개까지 연결될 수 있는지를 나타낸다. 네 가지 유형이 있다.

  • One to One: 양쪽 모두 최대 하나의 상대 Entity와 연결
  • One to Many: 한쪽은 여러 개, 반대쪽은 최대 하나
  • Many to One: One to Many의 반대 방향
  • Many to Many: 양쪽 모두 여러 개의 상대 Entity와 연결 가능

E-R Diagram에서는 **방향이 있는 화살표(→)**가 "one"을, **방향이 없는 직선(—)**이 "many"를 의미한다.

Total and Partial Participation

Total Participation은 Entity Set의 모든 Entity가 해당 Relationship에 최소 하나 이상 참여하는 것을 의미하며, E-R Diagram에서 **이중선(double line)**으로 표현한다. 예를 들어, "모든 학생은 반드시 하나의 학과에 소속되어야 한다"는 Total Participation이다.

Partial Participation은 일부 Entity가 해당 Relationship에 참여하지 않을 수 있는 경우이다.

복합 제약 조건 표기법

E-R Diagram에서 선에 l..h 형식으로 최소(l)와 최대(h) Cardinality를 표기할 수 있다.

  • 최솟값 1: Total Participation을 의미한다.
  • 최댓값 1: 해당 Entity가 최대 하나의 Relationship에만 참여한다.
  • 최댓값 *: 참여 횟수에 제한이 없다.

예를 들어, 0..* 이면 Partial Participation이고 Many 관계를, 1..1 이면 Total Participation이고 One 관계를 나타낸다.

Primary Key in E-R Model

Primary Key는 Entity와 Relationship을 구별하는 핵심 수단이다.

Primary Key for Entity Sets

정의상 개별 Entity는 서로 구별되어야 한다. 데이터베이스 관점에서 Entity 간의 차이는 Attribute 값으로 표현되며, 같은 Entity Set 내에서 두 Entity가 모든 Attribute에 대해 동일한 값을 가질 수는 없다.

Key란 Entity를 서로 구별하기에 충분한 Attribute의 집합이다.

Primary Key for Relationship Sets

Relationship Set에서 개별 Relationship을 구별하기 위해서는, 참여하는 Entity들의 Primary Key를 조합한다. Relationship Set R에 Entity Set E1E_1, E2E_2, ..., EnE_n이 참여한다면, R의 Primary Key는 이들 Entity Set의 **Primary Key의 합집합(Union)**으로 구성된다.

예를 들어, "advisor" Relationship Set의 Primary Key는 instructor.ID와 student.ID의 조합이다.

Binary Relationship의 Primary Key 선택

Binary Relationship의 Primary Key는 Mapping Cardinality에 따라 달라진다.

  • Many-to-Many: 양쪽 Entity Set의 Primary Key를 합친 것이 최소 Super Key가 되며, 이것이 Primary Key가 된다.
  • One-to-Many (또는 Many-to-One): "Many" 쪽 Entity Set의 Primary Key가 최소 Super Key이므로, 이것을 Primary Key로 사용한다.
  • One-to-One: 참여하는 어느 쪽 Entity Set의 Primary Key든 최소 Super Key가 되므로, 둘 중 하나를 선택하면 된다.

Weak Entity Set

Weak Entity Set은 스스로 독립적으로 존재할 수 없고, 다른 Entity(Identifying Entity)에 의존하는 Entity Set이다. Weak Entity Set은 자체 Primary Key를 갖지 않는다.

그렇다면 Weak Entity Set 내의 Entity를 어떻게 구별할까? Discriminator(구별자)라는 추가 Attribute를 사용한다. Weak Entity Set의 Primary Key는 다음과 같이 구성된다.

Weak Entity의 Primary Key = Strong Entity Set(Identifying Entity Set)의 Primary Key + Discriminator

예를 들어, section은 course 없이는 존재할 수 없는 Weak Entity이다. section의 Primary Key는 **(course_id, sec_id, semester, year)**로, course의 Primary Key인 course_id와 section의 Discriminator인 sec_id, semester, year를 합친 것이다.

여기서 Identifying Entity Set은 Primary Key를 가진 Entity Set으로, Strong Entity Set과 같은 의미이다. Weak Entity Set과 Identifying Entity Set을 연결하는 관계를 Identifying Relationship이라 부른다.

Relation Schema로의 변환

E-R 모델에서 설계한 Entity Set과 Relationship Set은 Relation Schema로 변환할 수 있다. 핵심 원칙은 각 Entity Set과 Relationship Set에 대해 고유한 스키마가 존재한다는 것이다.

Entity Set의 변환

Strong Entity Set은 동일한 Attribute를 가진 스키마로 변환된다.

  • 예: student(ID, name, tot_cred)

Weak Entity Set은 자신의 Attribute에 더해 Identifying Strong Entity Set의 Primary Key 컬럼을 포함하는 테이블이 된다.

  • 예: section(course_id, sec_id, sem, year)

Composite Attribute는 각 구성 요소를 별도의 Attribute로 **평탄화(flatten)**한다.

  • 예: name이라는 Composite Attribute가 있다면, name_first_name, name_last_name 등으로 분리한다. 모호함이 없다면 접두사를 생략할 수 있다.

Multivalued Attribute별도의 스키마로 분리하여 표현한다. 이 스키마는 원래 Entity의 Primary Key와 해당 Multivalued Attribute를 Attribute로 가진다.

  • 예: instructor의 phone_number(Multivalued)는 inst_phone(ID, phone_number) 스키마로 변환된다.

Relationship Set의 변환

Mapping Cardinality에 따라 변환 방식이 달라진다.

  • Many-to-Many: 별도의 매핑 테이블을 생성한다.
  • One-to-Many 또는 Many-to-One: 별도 테이블 없이, "One" 쪽의 Primary Key를 "Many" 쪽 테이블에 복사한다. 다만, "Many" 쪽이 Total Participation이 아닌 경우 NULL이 발생할 수 있다.
  • One-to-One: 별도 테이블 없이, 한쪽의 Primary Key를 다른 쪽에 복사하면 된다. 둘 중 어느 쪽이든 상관없다.

HGU 전산전자공학부 홍참길 교수님의 23-1 Database System 수업을 듣고 작성한 포스트이며, 첨부한 모든 사진은 교수님 수업 PPT의 사진 원본에 필기를 한 수정본입니다.