💡 핵심 인사이트
확장 ER 모델(Enhanced ER Model)은 전통적인 ER 모델(네모, 동그라미)이 1980년대 객체지향 프로그래밍(Java 등)의 복잡한 논리를 다 담아내지 못하자, ER 모델에 '상속(Inheritance)', '슈퍼클래스', '서브클래스' 같은 객체지향의 고급 개념들을 덧붙여(Enhanced) 진화시킨 스케치 도구입니다.
Ⅰ. 확장 ER 모델의 등장 배경
은행 DB를 만든다고 칩시다. 고객 중에는 '개인 고객'과 '법인(회사) 고객'이 있습니다. 전통적 ER 모델로는 두 가지 방식으로밖에 못 그립니다.
고객이라는 거대한 네모 하나를 만들고, (주민번호, 사업자번호) 타원을 다 때려 박는다. ➔ 개인 고객에게는 사업자번호가 빈칸(NULL)으로 남아 심각한 낭비 발생.개인고객네모와법인고객네모를 따로 분리해서 그린다. ➔ 둘 다 공통으로 가진 '이름', '연락처' 속성을 중복해서 두 번 그려야 하므로 비효율 발생.
이 딜레마를 해결하기 위해 **"공통점은 위로 묶고, 차이점은 아래로 내리자"**는 상속(Inheritance) 개념을 ERD 기호에 도입한 것이 EER입니다.
Ⅱ. 핵심 개념: 일반화(Generalization)와 특수화(Specialization)
방향을 위로 향하느냐, 아래로 향하느냐의 차이일 뿐 본질은 같습니다.
1. 특수화 (Specialization) - Top-Down (위에서 아래로 쪼개기)
- 개념: 뚱뚱한 부모(슈퍼클래스)를 먼저 세워두고, 그 아래에 특징이 다른 자식들(서브클래스)을 세분화하여 갈라내는 과정입니다.
- 예시:
[직원]이라는 공통 뼈대(슈퍼)에서 ➔[정규직]과[계약직]이라는 자식(서브)들로 특수하게 쪼갭니다.
2. 일반화 (Generalization) - Bottom-Up (아래에서 위로 묶기)
- 개념: 바닥에 흩어진 여러 개체들의 '공통된 속성'만 추출하여 상위에 새로운 가상의 부모(슈퍼클래스)를 빚어내는 추상화 과정입니다.
- 예시:
[승용차]와[트럭]을 모델링하다 보니 둘 다 바퀴와 엔진이 있네? ➔ 공통점을 묶어 위에[자동차]라는 슈퍼클래스 뼈대를 만듭니다.
Ⅲ. EER의 상속과 제약조건 기호
EER은 슈퍼클래스와 서브클래스 사이에 **삼각형(또는 반원)**을 그려 상속 관계를 표시합니다. 이때 자식이 부모의 속성(이름, 연락처)을 100% 그대로 공짜로 물려받습니다(상속).
서브클래스의 제약조건 2가지 (중요)
상속 트리를 그릴 때, 데이터를 어떻게 분류할 것인지 선을 긋는 룰입니다.
- 중복(Disjointness) 제약조건 (d vs o)
- Disjoint (d): 교집합 불가. 자식들은 서로 겹칠 수 없습니다. 직원은 무조건
[정규직]이거나[계약직]둘 중 하나만 선택해야 합니다. - Overlap (o): 교집합 허용. 벤처기업 직원은
[개발자]이면서 동시에[디자이너]속성을 중복으로 양다리 걸칠 수 있습니다.
- Disjoint (d): 교집합 불가. 자식들은 서로 겹칠 수 없습니다. 직원은 무조건
- 참여(Completeness) 제약조건 (단일선 vs 이중선)
- Total (이중선 ===): 전체 참여. 세상 모든 부모 데이터는 반드시 아래쪽 서브클래스 중 최소 하나에 속해야 합니다. (제3의 성별은 없음).
- Partial (단일선 ──): 부분 참여. 직원은 개발자일 수도 있고 디자이너일 수도 있지만, 사장님처럼 둘 다 해당 안 되는 그냥 [직원(부모)] 상태로 남아있는 예외 데이터가 존재할 수 있습니다.
📢 섹션 요약 비유: EER은 생물학의 '종속과목강문계' 동물 도감을 그리는 것과 같습니다. 전통 ER 모델이 개, 고양이, 사자를 전부 제각각의 네모로 그렸다면, EER은 "얘들은 젖을 먹네? 그럼 '포유류(슈퍼클래스)'라는 뼈대를 위에 만들어 공통 속성을 몰아넣자(일반화)"라고 정리하여 설계도를 압도적으로 세련되고 재사용 가능하게 만들어주는 객체지향 스케치북입니다.