2강에서 수집한 요구사항을 이제 개념 모델로 옮깁니다.
1. ER 모델의 3요소
Peter Chen(1976)이 제안한 ER 모델은 세 가지로 세상을 표현합니다.
| 요소 | 의미 | 예시 |
|---|---|---|
| 엔티티(Entity) | 독립적으로 식별 가능한 대상 | 주문항목, 출고 담당자 |
| 속성(Attribute) | 엔티티나 관계의 성질 | 주문항목 무게, 담당자 이름 |
| 관계(Relationship) | 엔티티 사이의 연관 | 담당자가 처리단계를 수행한다 |
2. 엔티티의 종류
| 종류 | 설명 | 예시 |
|---|---|---|
| 강한 엔티티 | 자기 속성만으로 식별 가능 | 주문(주문번호) |
| 약한 엔티티 | 소유 엔티티가 있어야 식별 가능 | 항목처리 차수(항목번호 + 차수) |
| 기본 엔티티 | 업무의 원천 | 주문, 담당자, 처리단계 |
| 중심 엔티티 | 기본 엔티티에서 파생된 업무 핵심 | 주문항목, 출고지시 |
| 행위 엔티티 | 업무 행위의 기록, 건수가 많고 자주 변경 | 처리 실적, 검수결과 |
행위 엔티티는 데이터가 가장 많이 쌓이는 곳이므로 물리 설계의 주요 대상이 됩니다.
3. 속성의 종류
| 종류 | 설명 | 예시 | 논리 설계 시 처리 |
|---|---|---|---|
| 단순 속성 | 더 나눌 수 없음 | 무게 | 컬럼 1개 |
| 복합 속성 | 여러 하위 속성으로 구성 | 주소(시, 구, 도로명) | 하위 속성별 컬럼 |
| 단일값 속성 | 값이 하나 | 생년월일 | 컬럼 1개 |
| 다중값 속성 | 값이 여러 개 | 담당자의 취급 자격 | 별도 테이블 |
| 유도 속성 | 다른 속성에서 계산 | 처리율, 나이 | 보통 저장하지 않음 (10강에서 예외 논의) |
| 식별 속성 | 엔티티를 식별 | 항목번호 | PK 후보 |
다중값 속성을 콤마로 이어 한 컬럼에 넣는 것이 대표적인 안티패턴(Jaywalking)입니다. 개념 모델에서 다중값임을 표시해두면 이 실수를 막을 수 있습니다.
4. 관계의 성질
① 차수(Degree): 참여하는 엔티티 수
- 단항(재귀): 담당자 ─ 담당자 (조장-조원)
- 이항: 주문항목 ─ 처리단계
- 삼항: 담당자 ─ 주문항목 ─ 처리단계 (누가 어느 주문항목의 어느 처리단계를 했는가)
② 카디널리티: 상대 엔티티와 대응하는 최대 수
- 1:1 — 주문 ─ 결제
- 1:N — 주문 ─ 주문항목
- N:M — 주문항목 ─ 처리단계
③ 참여도(Participation): 최소 수
- 전체 참여(필수): 모든 주문항목은 반드시 주문에 속한다
- 부분 참여(선택): 모든 담당자가 조장은 아니다
카디널리티와 참여도를 합쳐 (최소, 최대) 로 표기하면 모호함이 사라집니다.
주문 (1,1) ─── 소속 ─── (1,N) 주문항목
→ 주문항목은 정확히 1개 주문에 속함
→ 주문은 주문항목이 1개 이상 (항목이 하나도 없는 주문은 성립하지 않음)5. 삼항 관계는 이항 관계 셋과 다르다
"담당자 A가 주문항목 B의 처리단계 C를 수행했다"를 이항 관계 셋으로 쪼개면:
- 담당자 ─ 주문항목: A가 B에서 일했다
- 주문항목 ─ 처리단계: B는 C를 거친다
- 담당자 ─ 처리단계: A는 C를 할 줄 안다
이 셋을 조합하면 "A가 B의 C를 했다"가 참인지 알 수 없습니다. A가 B의 포장을 했고, B는 출고를 거치고, A가 출고도 할 수 있어도 A가 B의 출고를 한 것은 아닐 수 있습니다. 세 엔티티가 동시에 결합된 사실은 삼항 관계로 모델링해야 합니다. 이 원리는 9강의 5NF와 직결됩니다.
6. 엔티티인가, 속성인가, 관계인가
| 판단 질문 | Yes면 |
|---|---|
| 그 자체로 다른 속성을 가지는가? | 엔티티 |
| 여러 엔티티가 공유하는가? | 엔티티 |
| 독립적으로 생성·삭제되는가? | 엔티티 |
| 시간에 따라 이력이 필요한가? | 엔티티 (또는 관계) |
| 두 엔티티 사이에서만 의미가 있는가? | 관계 또는 관계의 속성 |
예시: "상품의 포장 색상"
- 색상 코드와 이름만 있다면 → 상품의 속성
- 색상마다 포장자재 제조사, 단가, 재고를 관리한다면 → 포장자재 엔티티, 상품과 관계
7. 재귀 관계
담당자 (0,1) ─── 조장이다 ─── (0,N) 담당자같은 엔티티 사이의 관계입니다. 역할 이름(조장, 조원)을 반드시 붙여야 의미가 명확해집니다. 17강 계층 구조 모델링의 출발점입니다.
8. 예제 도메인 개념 모델
[셀러] 1 ──보유── N [출고 담당자] ──┐
│ (조장) │ 재귀
└─────────┘
[고객] 1 ──발주── N [주문]
[주문] 1 ──소속── N [주문항목]
[상품] 1 ──판매── N [주문항목] (25강에서 출고 단위로 분해)
[주문항목] N ──적용── M [처리단계] → 관계 속성: 계획일, 실적일, 차수
[출고 담당자], [주문항목], [처리단계] ── 수행 (삼항) → 관계 속성: 처리일, 투입 시수
[검수자] ──검수── [항목처리] → 관계 속성: 판정, 검수 일자마지막 줄은 관계(항목처리)에 대한 관계입니다. 이런 형태가 보이면 해당 관계를 엔티티로 승격(연관 엔티티)시켜야 한다는 신호입니다.
3강 정리
- ER 모델은 엔티티·속성·관계로 구성되며, 관계에도 속성이 있다.
- 다중값 속성은 별도 테이블 후보이며, 콤마 저장은 안티패턴이다.
- 카디널리티(최대)와 참여도(최소)를 함께 표기해야 모호하지 않다.
- 삼항 관계는 이항 관계 셋으로 분해할 수 없다.
- 관계에 다시 관계가 붙으면 연관 엔티티로 승격한다.