Entity-Relationship Model
ER(Entity-Relationship) model은 데이터베이스 개념 설계 단계에서 사용자 요구사항을 구조화하는 개념적 데이터 모델이다. 3-schema architecture의 개념 스키마를 표현하는 데 주로 쓰이며, 현실 세계를 Entity, Attribute, Relationship 세 가지 핵심 개념으로 표현한다.
flowchart LR Entity["Entity
실제/개념적 객체"] Attribute["Attribute
엔티티 기술 속성"] Relationship["Relationship
엔티티 간의 연관"] Entity --> Attribute Entity --- Relationship Relationship --- Entity
ER Model 주요 개념 3가지
ER model의 주요 개념은 Entities, Attributes, Relationships 세 가지이며, 원문은 이 중 Relationships를 별표(⭐)로 강조한다.[1]
특정 Entity는 attribute들에 대한 값을 가지며, 각 attribute는 값의 집합 또는 데이터 타입을 가진다.[3] 원문은 개념 설계 방법론으로 ER Diagram과 Design Tools를 들고, UML의 Class Diagram이 인기 있다고 적는다.[4]
Attribute 유형
| 유형 | 설명 | 비고 |
|---|---|---|
| Simple | atomic value. 쪼갤 수 없는 값[5] | - |
| Composite (복합) | 더 작은 구성 요소로 나눌 수 있음[5:1] | - |
| Multi-valued | 하나의 attribute가 여러 값을 가짐[5:2] | - |
| 일반적으로 | composite과 multi-valued는 잘 안 씀[5:3] | 정규화 과정에서 걸리기 때문에 테이블에서 안 쓰임[5:4] |
Entity Types와 Key Attributes
- Key attribute of entity type: entity type 중 하나의 attribute가 unique value(구별 가능한 값)여야 한다.[6]
- Composite attribute가 key가 될 수 있다.[6:1]
- 각 key는 ER diagram에서 밑줄로 표시한다. (주의: Relational schema의 primary key 밑줄과 다르다.)[6:2]
- Entity type은 한 개 이상의 key를 가질 수 있다.[6:3]
Entity Set
Entity Set은 각 entity type이 가지는 entity들의 모음(collection of entities)이다. Entity set은 엔티티들의 현재 상태에 해당한다.[7] 이를 database state(특정 시간의 실제 데이터)와 비슷한 개념으로 보는 것은 이 page의 해석이다.
Value Sets (Domains) of Attributes
Value set은 attribute가 가질 수 있는 값의 범위(domain of values)다.[8]
Relationship에 대한 제약
| 제약 | 설명 |
|---|---|
| Cardinality Ratio | 최대 참가 명시. 1:1, 1:N, N:1, M:N[9] |
| Existence Dependency (=Participation constraint) | zero = 옵션적 참여, one or more = 무조건 참여[9:1] |
Recursive Relationship Type (self-referencing)
Recursive Relationship은 명시된 역할에서 같은 엔티티 타입 사이에서의 관계 타입이며, 각 역할 기술이 필요하다.[10] 예를 들어 Employee entity 안의 Supervises relationship에서 supervisor와 supervisee는 같은 Employee 타입의 두 역할이다.
Weak Entity Type
| 특성 | 설명 |
|---|---|
| 정의 | 다른 엔티티 타입에 의존적. key attribute가 없는 엔티티 타입[11] |
| 식별 | 다른 엔티티 타입의 엔티티들과 연계됨으로써 식별 가능[11:1] |
| Partial key | 원문 노트는 "다른 엔티티 타입에 있는 속성 중 키로 약한 엔티티타입의 키로 사용하는 속성을 말하는 듯"이라고 추측으로만 적었으며, 확인된 정의가 아니다.[11:2] |
| Identifying relationship | 약한 엔티티 타입과 의존하는 엔티티 타입의 관계 타입[11:3] |
Weak entity는 자체 key가 없으므로, identifying relationship과 결합해야만 개별 인스턴스를 식별할 수 있다고 볼 수 있다.[12]
Relationship Type의 속성
대부분의 관계 속성은 M:N 관계에서 사용된다.[13] 예를 들어 학생이 과목을 수강하는 relationship에 "수강 학기", "성적" 속성을 두는 경우다.
Relationships of Higher Degree
| Degree | 이름 | 비고 |
|---|---|---|
| 2 | binary | - |
| 3 | ternary | - |
| n | n-ary | - |
n-ary relationship은 n개의 binary relationship과 같지 않다.[14] n-ary 한 개가 n개 binary로 정확히 분해되지 않는 이유를 의미와 제약의 차이로 보는 것은 이 page의 해석이다.[12:1]
이 제약이 중요한 이유는, "한 트랜잭션에서 3개 엔티티가 동시에 참여해야 의미가 있는 관계"를 binary 3개로 쪼개면 원래 의미를 잃기 때문이다. 예를 들어 "특정 supplier가 특정 project에 특정 part를 공급"하는 관계를 supplier-part, part-project, supplier-project라는 binary 3개로 쪼개면 "공급"이라는 ternary 의미를 살릴 수 없다고 볼 수 있다.[12:2]
Relational Algebra (개념 연계)
Relational Algebra의 UNION, INTERSECT, DIFFERENCE 연산은 type compatible(두 relation의 타입이 같고 attribute 수가 같아야 함)이어야 한다.[15] 원문에는 COMMUTATIVE(교환)라는 제목만 있고, 어떤 연산이 교환 성질을 가지는지는 적혀 있지 않다.[15:1]
SQL 중첩이 가능한 이유가 이 닫힌 성질 — 연산 결과가 다시 relation이 되는 성질 — 때문이라는 점은 Database System Foundation에서 다뤘다.
종합
ER model의 본질은 현실을 Entity·Attribute·Relationship 세 개념으로 구조화하는 데 있다고 볼 수 있다. 설계 시 주의할 지점은 다음과 같다.
- Relationship이 가장 중요한 개념이다 — Entity/Attribute는 직관적이지만, Relationship이 데이터의 의미를 결정한다.
- M:N 관계에서 relationship attribute가 자주 쓰인다 — 반대로 1:N/1:1에서는 보통 attribute를 entity로 올려서 다루는 편이 단순하다.
- Weak entity는 자체 key가 없으므로 identifying relationship과 결합해 식별한다.
- n-ary relationship을 무조건 binary로 분해하면 안 된다 — 의미론적 정보가 손실되므로, ternary는 ternary 그대로 다루는 것이 정확하다.
정규화 단계로 넘어가면 composite/multi-valued attribute는 걸러지고 테이블로 정리되며, 그 뒤 relational schema가 된다. 따라서 ER model은 개념적 설계에서 논리적 설계(relational schema)로 가는 중간 단계의 표현 도구로 볼 수 있다.[12:3]
흔히 놓치는 지점
- M:N 관계의 relationship attribute를 entity에 그냥 달아버리면 정규화 위반, 다중 값 저장 문제가 생긴다.
- n-ary(특히 ternary) relationship을 binary n개로 분해하면 원래 의미를 잃는다.
- Weak entity를 strong entity처럼 취급해 partial key 없이 식별하려는 경우가 있다.
- Key attribute를 ER diagram 밑줄과 Relational schema primary key 밑줄이 같다고 가정해 혼동하는 경우가 있다.
- Recursive relationship에서 역할(role)을 명시하지 않아 같은 entity 타입 안의 두 참여를 구분 못 하는 경우가 있다.
- Participation constraint(0 vs 1+)를 명시하지 않아 선택 참여인지 필수 참여인지 설계에서 놓치는 경우가 있다.
관련
- Database System Foundation — ER model이 개념적 데이터 모델로 다루는 대상(데이터, mini-world, transaction)을 정의한다.
- 3-schema architecture — ER model은 주로 개념 스키마를 표현하는 데 사용된다. 외부 스키마(뷰)로 변환하거나 내부 스키마(저장 구조)로 매핑하는 단계는 별도다.
- Database Normalization — ER model을 테이블로 옮긴 뒤 함수 종속성 기준으로 릴레이션을 분해하는 다음 단계다.
출처
테스트 질문
- ER model의 주요 개념 3가지와 그중 가장 중요한 것은 무엇인가?
- Relationship의 attribute는 주로 어떤 cardinality에서 사용되며, 그 이유는 무엇인가?
- Weak entity는 왜 별도로 다루며, partial key와 identifying relationship의 역할은 무엇인가?
- n-ary relationship을 n개의 binary relationship으로 분해하면 안 되는 이유는 무엇인가?
- Recursive relationship에서 "역할(role)"을 명시해야 하는 이유는 무엇인가?
개념정리.md — (L261-264) "ER model의 주요 개념 3가지", "Entities", "Attributes", "Relationships⭐" ↩︎
개념정리.md — "Entity는 실제로 또는 개념적으로 존재하는 객체", "Attribute는 엔티티를 기술하는 속성" ↩︎ ↩︎
개념정리.md — "특정 Entity는 attribute들에 대한 값을 가짐", "각 attribute는 값의 집합 또는 데이터 타입을 가짐" ↩︎
개념정리.md — (L197-200) "Methodologies for Conceptual Design(개념 설계 방법론)⭐", "Entity Relationship (ER) Diagrams", "Design Tools", "UML의 Class Diagram이 인기" ↩︎
개념정리.md — "Simple: atomic value", "Composite(복합): 더 작은 구성 요소로 나눌 수 있음", "Multi-valued: 하나의 Atrribute가 여러 값을 가짐", "composite와 multi-valued는 잘 안씀, 정규화 과정에서 걸리기 때문에 테이블에서 안 쓰임" ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
개념정리.md — "entity type 중 하나의 attribute가 unique value(구별가능한 값)여야 함", "composite가 key가 될 수 있음", "각 key는 밑줄(Relational schema의 primary key의 밑줄과 다름)", "entity type은 한개 이상의 key를 가질 수 있음" ↩︎ ↩︎ ↩︎ ↩︎
개념정리.md — "Each Entity type will have collection of entities", "Entity set is the current state of the entities" ↩︎
개념정리.md — "Cardinality Ratio: 최대 참가 명시, ex) 1:1, 1:N, N:1, M;N", "Existence Dependency Constraint(=Participation constraint): zero = 옵션적 참여, one or more = 무조건 참여" ↩︎ ↩︎
개념정리.md — "Recursive Relationship(self-referencing relationship): 명시된 역할에서 같은 엔티티 타입 사이에서 관계 타입, 각 역할 기술 필요" ↩︎
개념정리.md — (L282-291) "다른 엔티티 타입에 의존적", "key attribute가 없는 엔티티 타입", "다른 엔티티 타입의 엔티티들과 연게됨으로써 식별 가능", "partial key", "다른 엔티티 타입에 있는 속성 중 키로 약한 엔티티타입의 키로 사용하는 속성을 말하는 듯", "Identifying reationship", "약한 엔티티 타입과 의존하는 엔티티 타입의 관계 타입" ↩︎ ↩︎ ↩︎ ↩︎
출처 매핑 미확인 — "weak entity는 identifying relationship과 결합해야만 식별 가능하다는 결론", "n-ary가 n개 binary로 분해되지 않는 이유를 의미와 제약의 차이로 보는 설명", "ternary를 binary 3개로 쪼개면 '공급' 의미를 살릴 수 없다는 supplier-part-project 예시 해석", "ER model이 개념적 설계에서 논리적 설계로 가는 중간 단계 표현 도구"라는 종합은 source 개별 사실을 엮은 Wiki 차원의 해석이며 source에 이 문장 그대로는 없다. ↩︎ ↩︎ ↩︎ ↩︎
개념정리.md — "n-ary relationship != n binary relationships⭐" ↩︎
개념정리.md — (L314-318) "UNION, INTERSECT, DIFFERENCE", "type compatible = 두개의 타입이 같아야함", "애트리뷰트 수 같아야함", "COMMUTATIVE(교환)" (L318 제목 아래 내용 없음) ↩︎ ↩︎