데이터 모델링

데이터 모델링

데이터 모델링 개요

현실 세계의 데이터를 데이터베이스로 옮기는 변환 과정

┌─────────────────────────────────────────────────────────────────────┐
│                     데이터 모델링 과정                               │
│                                                                     │
│   현실 세계          개념 세계             컴퓨터 세계               │
│  ┌─────────┐       ┌─────────┐          ┌─────────┐               │
│  │ 고객    │       │         │          │ 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)데이터베이스의 논리적 구조