데이터 모델링
데이터 모델링 개요
현실 세계의 데이터를 데이터베이스로 옮기는 변환 과정
┌─────────────────────────────────────────────────────────────────────┐
│ 데이터 모델링 과정 │
│ │
│ 현실 세계 개념 세계 컴퓨터 세계 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 고객 │ │ │ │ CUSTOMER│ │
│ │ 상품 │ ────→ │ E-R │ ───────→ │ TABLE │ │
│ │ 주문 │ │ Diagram │ │ CREATE │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │ │ │ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ 요구사항 개념적 구조 논리적 구조 │
│ 분석 (스키마 독립) (DBMS 종속) │
│ │
│ 개념적 모델링 논리적 모델링 │
└─────────────────────────────────────────────────────────────────────┘모델링 단계
| 단계 | 설명 | 산출물 | 도구 |
|---|---|---|---|
| 개념적 모델링 | 현실 세계 → 개념 세계 | 개념적 구조 | E-R 모델 |
| 논리적 모델링 | 개념 세계 → 논리적 구조 | 스키마 | 관계 데이터 모델 |
| 물리적 모델링 | 논리적 구조 → 저장 구조 | 물리적 스키마 | DBMS 설정 |
데이터 모델의 구성요소
┌────────────────────────────────────────────────────────┐
│ 데이터 모델 = 3요소 │
├────────────────────────────────────────────────────────┤
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 데이터 구조 │ │ 연산 │ │ 제약조건 │ │
│ │ (Structure) │ │ (Operation) │ │ (Constraint) │ │
│ ├──────────────┤ ├──────────────┤ ├──────────────┤ │
│ │ 정적 특성 │ │ 동적 특성 │ │ 무결성 규칙 │ │
│ │ 개체, 속성 │ │ CRUD 작업 │ │ 데이터 제한 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└────────────────────────────────────────────────────────┘개체-관계 모델 (E-R Model)
피터 첸(1976)이 제안. 개체와 관계로 현실 세계를 표현
E-R 다이어그램 기본 기호
┌─────────────────────────────────────────────────────────────────────┐
│ E-R 다이어그램 기호 │
│ │
│ ┌─────────┐ 개체 (Entity) │
│ │ 고객 │ - 사각형으로 표현 │
│ └─────────┘ - 식별 가능한 사물/개념 │
│ │
│ ◇─────────◇ 관계 (Relationship) │
│ │ 주문 │ - 마름모로 표현 │
│ ◇─────────◇ - 개체 간 연관성 │
│ │
│ ( 이름 ) 속성 (Attribute) │
│ - 타원으로 표현 │
│ - 개체/관계의 특성 │
│ │
│ ( _고객ID_ ) 키 속성 (Key) │
│ - 밑줄로 표현 │
│ - 개체 식별자 │
│ │
│ ((연락처)) 다중 값 속성 │
│ - 이중 타원 │
│ - 여러 값 가능 │
│ │
│ ( - - - ) 유도 속성 │
│ ( 나이 ) - 점선 타원 │
│ - 다른 속성에서 계산 │
└─────────────────────────────────────────────────────────────────────┘1. 개체 (Entity)
현실 세계에서 구별되는 사람, 사물, 개념
개체의 구성
┌─────────────────────────────────────────────────────────────────────┐
│ 개체의 구조 │
│ │
│ 개체 타입 (Entity Type) │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 고객 (이름, 연락처, 주소, 등급) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 개체 인스턴스 (Entity Instance) │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 홍길동, 010-1234-5678, 서울시 강남구, VIP │ │
│ │ 김철수, 010-5678-1234, 부산시 해운대구, 일반 │ │
│ │ 이영희, 010-9999-8888, 대전시 서구, VIP │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ 개체 집합 (Entity Set) = 인스턴스들의 모음 │
└─────────────────────────────────────────────────────────────────────┘용어 대응 관계
| E-R 모델 | 파일 시스템 | 관계형 DB |
|---|---|---|
| 개체 타입 | 레코드 타입 | 테이블 (릴레이션) |
| 개체 인스턴스 | 레코드 인스턴스 | 행 (튜플) |
| 속성 | 필드 | 컬럼 (속성) |
2. 속성 (Attribute)
개체가 가지는 고유한 특성
속성의 분류
┌─────────────────────────────────────────────────────────────────────┐
│ 속성 분류 체계 │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 속성 │ │
│ └──────────────────────────┬──────────────────────────────────┘ │
│ │ │
│ ┌────────────┬───────────┼───────────┬────────────┐ │
│ ▼ ▼ ▼ ▼ ▼ │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │단일값│ │다중값│ │단순 │ │복합 │ │유도 │ │
│ │속성 │ │속성 │ │속성 │ │속성 │ │속성 │ │
│ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ │
│ 이름 연락처 나이 주소 판매가 │
│ (1개) (여러개) (분해X) (분해O) (계산됨) │
└─────────────────────────────────────────────────────────────────────┘속성 유형별 상세
| 유형 | 설명 | 예시 | E-R 기호 |
|---|---|---|---|
| 단일 값 | 하나의 값만 가짐 | 이름, 주민번호 | ( ) |
| 다중 값 | 여러 값을 가질 수 있음 | 연락처, 취미 | (( )) |
| 단순 | 더 분해 불가 | 나이, 성별 | ( ) |
| 복합 | 여러 속성으로 분해 가능 | 주소 → 시, 구, 동 | ( )─( ) |
| 유도 | 다른 속성에서 계산 | 나이 (생년월일에서) | (—) |
| 저장 | 실제 저장되는 값 | 생년월일, 정가 | ( ) |
| 널 | NULL 허용 속성 | 배우자명 | ( ) |
| 키 | 개체 식별자 | 고객ID, 주민번호 | ( _ ) |
속성 예시
┌─────────────────────────────────────────────────────────────────────┐
│ 고객 개체의 속성들 │
│ │
│ ┌─────────┐ │
│ │ 고객 │ │
│ └────┬────┘ │
│ ┌────────┬───────┼────────┬────────┐ │
│ │ │ │ │ │ │
│ (_고객ID_) (이름) ((연락처)) (주소) (- 나이 -) │
│ 키속성 단일값 다중값 │ 유도속성 │
│ │ (생년월일→계산) │
│ ┌───────┬───┴───┬───────┐ │
│ │ │ │ │ │
│ (시) (구) (동) (상세) │
│ 복합 속성 │
└─────────────────────────────────────────────────────────────────────┘3. 관계 (Relationship)
개체와 개체 간의 의미 있는 연관성
관계의 유형 (참여 개체 수 기준)
┌─────────────────────────────────────────────────────────────────────┐
│ 관계 유형 (참여 개체 수) │
│ │
│ 이항 관계 (Binary) 삼항 관계 (Ternary) │
│ ┌───────┐ ┌───────┐ ┌───────┐ │
│ │ 고객 │ │ 상품 │ │ 고객 │ │
│ └───┬───┘ └───┬───┘ └───┬───┘ │
│ │ │ │ │
│ └─────◇─────┘ ├─────────◇─────────┐ │
│ 주문 │ 구매 │ │
│ ┌───┴───┐ ┌───┴───┐ │
│ │ 상품 │ │ 매장 │ │
│ └───────┘ └───────┘ │
│ │
│ 순환 관계 (Recursive) │
│ ┌───────┐ │
│ │ 사원 │◇────┐ │
│ └───┬───┘ │ 관리 │
│ └─────────┘ │
│ (자기 자신과 관계) │
└─────────────────────────────────────────────────────────────────────┘매핑 카디널리티 (Cardinality)
┌─────────────────────────────────────────────────────────────────────┐
│ 매핑 카디널리티 │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 일대일 (1:1) │ │
│ │ │ │
│ │ ┌───────┐ ┌───┐ ┌───────┐ │ │
│ │ │ 사원 │──────│1:1│──────│ 사물함 │ │ │
│ │ └───────┘ └───┘ └───────┘ │ │
│ │ │ │
│ │ - 각 사원은 하나의 사물함만 사용 │ │
│ │ - 각 사물함은 한 명의 사원만 사용 │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 일대다 (1:N) │ │
│ │ │ │
│ │ ┌───────┐ ┌───┐ ┌───────┐ │ │
│ │ │ 부서 │──────│1:N│──────│ 사원 │ │ │
│ │ └───────┘ └───┘ └───────┘ │ │
│ │ │ │
│ │ - 한 부서에 여러 사원 소속 가능 │ │
│ │ - 각 사원은 하나의 부서에만 소속 │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 다대다 (M:N) │ │
│ │ │ │
│ │ ┌───────┐ ┌───┐ ┌───────┐ │ │
│ │ │ 학생 │──────│M:N│──────│ 과목 │ │ │
│ │ └───────┘ └───┘ └───────┘ │ │
│ │ │ │
│ │ - 한 학생이 여러 과목 수강 가능 │ │
│ │ - 한 과목에 여러 학생 수강 가능 │ │
│ └─────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘관계의 참여 특성
┌─────────────────────────────────────────────────────────────────────┐
│ 참여 특성 │
│ │
│ 필수적 참여 (전체 참여) ═══════ │
│ - 모든 개체 인스턴스가 관계에 참여 │
│ - 이중선으로 표현 │
│ │
│ ┌───────┐ ┌───────┐ │
│ │ 사원 │═════◇═══════│ 부서 │ │
│ └───────┘ 소속 └───────┘ │
│ (모든 사원은 반드시 부서에 소속) │
│ │
│ 선택적 참여 (부분 참여) ───────── │
│ - 일부 개체 인스턴스만 관계에 참여 │
│ - 단일선으로 표현 │
│ │
│ ┌───────┐ ┌───────┐ │
│ │ 고객 │─────◇───────│ 주문 │ │
│ └───────┘ 구매 └───────┘ │
│ (주문하지 않은 고객도 존재 가능) │
└─────────────────────────────────────────────────────────────────────┘관계의 종속성 (약한 개체)
┌─────────────────────────────────────────────────────────────────────┐
│ 강한 개체 vs 약한 개체 │
│ │
│ 강한 개체 (Strong Entity) │
│ - 독립적으로 존재 가능 │
│ - 자신의 키로 식별 가능 │
│ - 일반 사각형으로 표현 │
│ │
│ 약한 개체 (Weak Entity) │
│ - 다른 개체에 종속되어 존재 │
│ - 부분 키(구별자) + 강한 개체 키로 식별 │
│ - 이중 사각형으로 표현 │
│ │
│ ┌───────┐ ╔═══════╗ │
│ │ 직원 │══════◇◇══════║ 부양가족 ║ │
│ └───────┘ 부양 ╚═══════╝ │
│ 강한 개체 약한 개체 │
│ (직원 없이 존재 불가) │
│ │
│ ※ 직원 삭제 시 → 부양가족도 삭제 │
│ ※ 부양가족 식별: 직원ID + 부양가족명(구별자) │
└─────────────────────────────────────────────────────────────────────┘4. E-R 다이어그램 실전 예제
쇼핑몰 E-R 다이어그램
┌─────────────────────────────────────────────────────────────────────┐
│ 쇼핑몰 E-R 다이어그램 │
│ │
│ │
│ (_고객ID_) (이름) (연락처) │
│ \ | / │
│ ┌─────────┐ │
│ │ 고객 │ │
│ └────┬────┘ │
│ │ │
│ │ 1 │
│ │ │
│ ◇────┴────◇ │
│ │ 주문 │─────(주문일자) │
│ ◇────┬────◇ │
│ │ │
│ │ N │
│ │ │
│ ┌────┴────┐ │
│ │ 주문 │ │
│ │ 상세 │─────(수량) │
│ └────┬────┘ │
│ │ │
│ │ N │
│ │ │
│ ◇────┴────◇ │
│ │ 포함 │ │
│ ◇────┬────◇ │
│ │ │
│ │ 1 │
│ │ │
│ ┌────┴────┐ │
│ │ 상품 │ │
│ └─────────┘ │
│ / | \ │
│ (_상품ID_) (상품명) (가격) (재고) │
│ │
│ 관계 정리: │
│ - 고객 : 주문 = 1 : N (한 고객이 여러 주문) │
│ - 주문 : 상품 = M : N (주문상세로 해소) │
└─────────────────────────────────────────────────────────────────────┘E-R 다이어그램 → 테이블 변환
-- 개체 → 테이블
CREATE TABLE 고객 (
고객ID INT PRIMARY KEY, -- 키 속성
이름 VARCHAR(50) NOT NULL, -- 단일 값 속성
연락처 VARCHAR(20) -- 단일 값 속성
);
CREATE TABLE 상품 (
상품ID INT PRIMARY KEY,
상품명 VARCHAR(100) NOT NULL,
가격 DECIMAL(10,2) NOT NULL,
재고 INT DEFAULT 0
);
-- 1:N 관계 → 외래 키로 표현
CREATE TABLE 주문 (
주문ID INT PRIMARY KEY,
고객ID INT NOT NULL, -- 1:N의 N쪽에 FK
주문일자 DATE NOT NULL, -- 관계의 속성
FOREIGN KEY (고객ID) REFERENCES 고객(고객ID)
);
-- M:N 관계 → 연결 테이블로 표현
CREATE TABLE 주문상세 (
주문ID INT,
상품ID INT,
수량 INT NOT NULL, -- 관계의 속성
PRIMARY KEY (주문ID, 상품ID),
FOREIGN KEY (주문ID) REFERENCES 주문(주문ID),
FOREIGN KEY (상품ID) REFERENCES 상품(상품ID)
);5. 논리적 데이터 모델
E-R 다이어그램을 DBMS가 지원하는 논리적 구조로 변환
논리적 데이터 모델 종류
┌─────────────────────────────────────────────────────────────────────┐
│ 논리적 데이터 모델 비교 │
│ │
│ ┌──────────────────┬──────────────────┬──────────────────┐ │
│ │ 관계 데이터 모델 │ 계층 데이터 모델 │ 네트워크 데이터 모델│ │
│ │ (Relational) │ (Hierarchical) │ (Network) │ │
│ ├──────────────────┼──────────────────┼──────────────────┤ │
│ │ │ A │ A │ │
│ │ ┌─────────┐ │ /│\ │ /│\ │ │
│ │ │ 테이블 │ │ / │ \ │ / │ \ │ │
│ │ │ (2차원) │ │ B C D │ B C D │ │
│ │ └─────────┘ │ /│\ │ \ │ / │ │
│ │ │ E F G │ E │ │
│ │ │ (트리 구조) │ (그래프 구조) │ │
│ ├──────────────────┼──────────────────┼──────────────────┤ │
│ │ 가장 널리 사용 │ 초기 DB 모델 │ 복잡한 관계 표현 │ │
│ │ MySQL, Oracle │ IMS 등 │ 현재 거의 안 씀 │ │
│ └──────────────────┴──────────────────┴──────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘관계 데이터 모델
┌─────────────────────────────────────────────────────────────────────┐
│ 관계 데이터 모델 │
│ │
│ 특징: │
│ - 데이터를 2차원 테이블로 표현 │
│ - 테이블 간 관계를 외래 키로 표현 │
│ - SQL로 데이터 조작 │
│ │
│ 고객 테이블 주문 테이블 │
│ ┌────────┬────────┬──────────┐ ┌────────┬────────┬────────┐ │
│ │고객ID │ 이름 │ 연락처 │ │주문ID │고객ID │주문일자│ │
│ ├────────┼────────┼──────────┤ ├────────┼────────┼────────┤ │
│ │ 1 │ 홍길동 │ 010-1234 │←────│ 101 │ 1 │ 24/1/1 │ │
│ │ 2 │ 김철수 │ 010-5678 │←────│ 102 │ 1 │ 24/1/5 │ │
│ │ 3 │ 이영희 │ 010-9999 │ │ 103 │ 2 │ 24/1/7 │ │
│ └────────┴────────┴──────────┘ └────────┴────────┴────────┘ │
│ PK PK FK │
└─────────────────────────────────────────────────────────────────────┘변환 규칙 요약
E-R → 관계형 테이블 변환
| E-R 요소 | 관계형 요소 | 변환 규칙 |
|---|---|---|
| 개체 | 테이블 | 개체 타입 → 테이블 |
| 속성 | 컬럼 | 속성 → 컬럼 |
| 키 속성 | 기본 키 | 키 속성 → PRIMARY KEY |
| 다중 값 속성 | 별도 테이블 | 새 테이블로 분리 |
| 복합 속성 | 분해 또는 유지 | 하위 속성들로 분해 |
| 1:1 관계 | 외래 키 | 어느 한쪽에 FK |
| 1:N 관계 | 외래 키 | N쪽에 FK |
| M:N 관계 | 연결 테이블 | 양쪽 FK를 가진 새 테이블 |
| 관계 속성 | 컬럼 | FK가 있는 테이블 또는 연결 테이블에 |
| 약한 개체 | 복합 키 | 강한 개체 PK + 구별자 |
다중 값 속성 변환 예시
-- 다중 값 속성: 연락처가 여러 개인 경우
-- 잘못된 방법 (1NF 위반)
CREATE TABLE 고객 (
고객ID INT PRIMARY KEY,
이름 VARCHAR(50),
연락처 VARCHAR(100) -- "010-1234, 010-5678" 저장? ❌
);
-- 올바른 방법: 별도 테이블로 분리
CREATE TABLE 고객 (
고객ID INT PRIMARY KEY,
이름 VARCHAR(50)
);
CREATE TABLE 고객연락처 (
고객ID INT,
연락처 VARCHAR(20),
연락처유형 VARCHAR(10), -- '휴대폰', '집', '회사'
PRIMARY KEY (고객ID, 연락처),
FOREIGN KEY (고객ID) REFERENCES 고객(고객ID)
);요약
핵심 개념
┌─────────────────────────────────────────────────────────────────────┐
│ 핵심 정리 │
│ │
│ 데이터 모델링 │
│ ├── 개념적 모델링 → E-R 다이어그램 │
│ └── 논리적 모델링 → 테이블 스키마 │
│ │
│ E-R 모델 구성요소 │
│ ├── 개체 (Entity) : □ 사각형 │
│ ├── 속성 (Attribute) : ○ 타원 │
│ └── 관계 (Relationship) : ◇ 마름모 │
│ │
│ 관계 유형 │
│ ├── 1:1 → 한쪽에 FK │
│ ├── 1:N → N쪽에 FK │
│ └── M:N → 연결 테이블 생성 │
│ │
│ 참여 특성 │
│ ├── 필수적 참여 ══ (이중선) : 모든 인스턴스 참여 │
│ └── 선택적 참여 ── (단일선) : 일부 인스턴스만 참여 │
└─────────────────────────────────────────────────────────────────────┘실무 체크리스트
✅ 모델링 단계
- 요구사항 분석 → 개체/속성/관계 식별
- E-R 다이어그램 작성
- 테이블 스키마 변환
- 정규화 검토
✅ 개체 설계
- 키 속성 반드시 지정
- 다중 값 속성은 별도 테이블로
- 유도 속성은 저장 vs 계산 결정
✅ 관계 설계
- 카디널리티 정확히 파악 (1:1, 1:N, M:N)
- 참여 특성 확인 (필수/선택)
- M:N은 연결 테이블로 분해
✅ 변환 시 주의
- 1NF 위반하는 다중 값 속성 분리
- 약한 개체는 복합 키로 처리
- 관계의 속성 위치 결정용어 정리
| 용어 | 설명 |
|---|---|
| 개체 (Entity) | 현실 세계에서 구별되는 사람, 사물, 개념 |
| 속성 (Attribute) | 개체의 고유한 특성 |
| 관계 (Relationship) | 개체 간의 의미 있는 연관성 |
| 카디널리티 | 관계에 참여하는 개체 수 (1:1, 1:N, M:N) |
| 키 (Key) | 개체를 식별하는 속성 |
| 약한 개체 | 다른 개체에 종속되어 존재하는 개체 |
| 구별자 (Discriminator) | 약한 개체를 식별하는 부분 키 |
| 스키마 (Schema) | 데이터베이스의 논리적 구조 |