DB 기초: 개념·논리·물리 모델링 & ERD 표기법

발라·2025년 7월 16일

서버 이해 첫걸음

목록 보기
5/11
post-thumbnail

데이터 베이스...즉 DB에 대해서 “무슨 용어부터 공부해야 해?” 싶을 텐데…
그런 고민을 해결하기 위해서 작성해봤어요!


1. 데이터 모델링 전체 프로세스

flowchart TD
  A[요구사항 분석] --> B[개념적 모델링]
  B --> C[논리적 모델링]
  C --> D[물리적 모델링]
  D --> E[실제 DB 구축]

2. 개념적 모델링 (Conceptual Modeling)

2‑1. 정의

  • 현실 세상의 대상(엔티티)과 그 속성, 관계를 추상화해서 표현
  • “무엇을 저장할지” 결정하는 단계

2‑2. 주요 개념

  1. 엔티티(Entity)

    • 현실 세계의 중요한 객체나 개념
    • 예) 회원, 상품, 주문, 블로그 포스트
    • ERD에 ■ 사각형으로 표현
  2. 속성(Attribute)

    • 엔티티가 가지는 세부 정보(특징)
    • 예) 회원 → 회원ID, 이름, 이메일, 가입일
    • ○ 타원으로 표현
  3. 인스턴스(Instance)

    • 엔티티의 실제 예시(레코드)
    • 예) {회원ID:1001, 이름:'홍길동', 이메일:'hong@example.com'}
  4. 관계(Relationship)

    • 엔티티 간의 의미 있는 연결
    • 예) 회원 작성 블로그, 주문 포함 상품
    • ◆ 마름모로 표현

2‑3. 카디널리티 & 참여도

  • 카디널리티(Cardinality): 한 쪽이 가질 수 있는 대상 수량 (1:1, 1:N 등)
  • 참여도(선택성): 관계에 참여하는 최소 개수 (필수 vs 선택)
카디널리티참여도기호설명
1:1필수|–|양쪽 모두 반드시 하나만 연결
1:1선택|–○한쪽은 선택적으로 연결 가능
1:N필수|–<N 쪽이 반드시 하나 이상 연결
1:N선택|–○<N 쪽이 0개 이상 연결

예) 회원(1) — 작성(◆) —< 블로그(N)
회원은 블로그를 0개 이상 작성할 수 있어 (1:0..N)


3. 논리적 모델링 (Logical Modeling)

3‑1. 정의

  • 개념적 모델(ERD)을 DBMS가 이해 가능한 테이블·컬럼 구조로 변환
  • “어떻게 구조화할지” 설계도 작성 단계

3‑2. 주요 작업

  1. 식별자 지정(Primary Key)

    • 각 테이블의 레코드를 유일하게 식별하는 컬럼 선택
    • 예) 회원ID, 주문번호
  2. 정규화(Normalization)

    • 중복 제거·이상 현상(Anomaly) 방지
    • 1NF: 컬럼 값이 원자값(더 분해 불가)
    • 2NF: 부분 함수 종속 제거
    • 3NF: 이행적 함수 종속 제거
  3. 관계 설정(Foreign Key)

    • 테이블 간 연관성 유지 위해 PK를 FK로 참조
    • 예) 주문 테이블에 회원ID(FK)

3‑3. 예시

CREATE TABLE Member (
  member_id INT PRIMARY KEY,
  name VARCHAR(50),
  email VARCHAR(100)
);

CREATE TABLE Orders (
  order_id INT PRIMARY KEY,
  member_id INT,
  order_date DATE,
  CONSTRAINT fk_orders_member FOREIGN KEY(member_id)
    REFERENCES Member(member_id)
);

: 너무 과하게 정규화하면 JOIN 비용↑…
실사용 패턴을 고려해 반정규화(Denormalization)도 고민해봐!


4. 물리적 모델링 (Physical Modeling)

4‑1. 정의

  • 논리적 모델을 실제 DBMS 상에 구현하고, 성능 최적화를 반영하는 단계
  • “실제 운영 환경”을 고려한 마무리 설계

4‑2. 주요 작업

  1. SQL 실행 & 스키마 생성
  2. 인덱스 설계
    • 검색 빈도 높은 컬럼에 B‑Tree, Hash, Bitmap 인덱스 등 활용
  3. 파티셔닝 & 클러스터링
    • 대용량 테이블 분할로 I/O 분산
  4. 저장 구조 & 접근 경로 튜닝
    • 페이지 크기, 테이블스페이스, I/O 채널 최적화

4‑3. 예시

-- 주문 테이블에 인덱스 추가
CREATE INDEX idx_orders_date ON Orders(order_date);

-- 월별 파티셔닝 예시 (Oracle 문법)
CREATE TABLE Orders_2023_Jan PARTITION OF Orders
  FOR VALUES FROM ('2023-01-01') TO ('2023-02-01');

: 운영 DB 로그와 모니터링 툴로 쿼리 패턴 분석 후 튜닝하자!


5. ERD 다이어그램 예시

       ┌────────┐      1:N 필수      ┌─────────┐
       │ 회원   │───────────────────<│ 주문    │
       └────────┘                    └─────────┘
          │ 1:1 선택                        │ 1:1 필수
          │                                 │
        (○)                               (|)
          │                                 │
       ┌────────┐      1:1 필수      ┌─────────┐
       │ 프로필 │────────────────────│ 회원    │
       └────────┘                    └─────────┘
  • ■ = 엔티티, ○ = 선택 속성, | = 필수 속성, < = 다수

✍️ 마무리

  1. 개념적: 현실을 데이터로 추상화, 핵심 개념 정의
  2. 논리적: ERD → 테이블·정규화·관계 설계
  3. 물리적: 실제 운영환경 반영, SQL·인덱스·파티셔닝까지 구현

작성일:2025.07.16
작성자:발라

profile
능숙한 바이브코딩을 할 수 있게 됨을 꿈꾸며

0개의 댓글