데이터베이스 설계 절차

반응형
SMALL

데이터베이스(DB)는 단순히 데이터를 저장하는 창고가 아닙니다.
어떻게 설계하느냐에 따라 성능, 유지보수, 확장성까지 전부 달라지죠.
그만큼 DB 설계는 아무렇게나 하면 안 되고, 단계적으로 ‘잘’ 해야 합니다.

이번 포스트에서는 데이터베이스 설계 절차와 스키마 계층 구조를 기반으로,
처음 DB 설계를 시작할 때 꼭 알아야 할 이론들을 정리해보겠습니다.


1. 데이터베이스 설계 순서

데이터베이스는 다음과 같은 5단계 설계 절차를 따릅니다:

✅ 설계 5단계 요약

단계 설명 주요 산출물
① 요구 조건 분석 사용자 요구 파악 요구 명세서
② 개념적 설계 현실 세계 모델링 (ERD 등) 개념 스키마
③ 논리적 설계 관계형 모델로 변환 논리 스키마
④ 물리적 설계 저장 구조 및 인덱스 설계 저장 설계서
⑤ 구현 실제 DB 생성, 트랜잭션 정의 테이블, SQL 스크립트 등

 2. 요구 조건 분석

“사용자가 어떤 데이터를, 어떤 방식으로 다루길 원하는가?”

  • 시스템의 업무 흐름과 정보 구조 파악
  • 사용자, 기획자, 개발자 간 인터뷰 및 명세서 작성
  • 결과물: 요구 조건 명세서

예시:

구분 요구사항 내용
사용자 고객은 회원가입 및 로그인 가능해야 함
상품 다양한 도서 정보를 검색/확인 가능
주문 고객은 도서를 장바구니에 담고 주문 가능
관리 관리자는 도서와 주문정보를 관리할 수 있어야 함

3. 개념적 설계

“현실 세계를 DB 구조로 추상화하는 단계”

  • E-R 다이어그램으로 개체, 속성, 관계 표현
  • DBMS와 무관한 고수준 모델
  • 개념 스키마 + 트랜잭션 모델 정의

예시:
고객 → 주문 → 상품 관계를 ERD로 도식화

┌────────────┐        ┌──────────────┐        ┌──────────────┐        ┌────────────┐
│  Customer  │        │    Order     │        │  OrderItem   │        │    Book    │
├────────────┤        ├──────────────┤        ├──────────────┤        ├────────────┤
│ PK cust_id │◄────┐  │ PK order_id  │◄────┐  │ PK order_id  │        │ PK book_id │
│ name       │     │  │ FK cust_id   │     │  │ PK book_id   │◄────┘  │ title      │
│ email      │     └──┤ order_date   │     └──┤ quantity     │        │ author     │
└────────────┘        └──────────────┘        └──────────────┘        │ price      │
                                                                      └────────────┘

4. 논리적 설계

“개념 모델을 실제 DBMS 구조로 옮기는 작업”

  • ERD를 릴레이션(테이블)으로 변환
  • 데이터 타입, 제약조건, 정규화 적용
  • DBMS마다 약간씩 다른 논리 스키마 구조 고려

예시:
Customer(ID, Name, Email) 식의 릴레이션 모델 구성

① Customer 테이블

속성명 데이터 타입 제약 조건 설명
customer_id INT PK 고객 고유 식별자
name VARCHAR(100) NOT NULL 고객 이름
email VARCHAR(100) UNIQUE 고객 이메일 (중복X)
password VARCHAR(100) NOT NULL 로그인 비밀번호

② Book 테이블

속성명 데이터 타입 제약 조건 설명
book_id INT PK 도서 고유 ID
title VARCHAR(200) NOT NULL 책 제목
author VARCHAR(100) NOT NULL 저자 이름
price DECIMAL(10, 2) DEFAULT 0.00 가격

③ Order 테이블

속성명 데이터 타입 제약 조건 설명
order_id INT PK 주문 고유 식별자
customer_id INT FK → Customer.customer_id 주문한 고객 ID
order_date DATE NOT NULL 주문일자

④ OrderItem 테이블

속성명 데이터 타입 제약 조건 설명
order_id INT PK, FK → Order.order_id 주문 ID
book_id INT PK, FK → Book.book_id 도서 ID
quantity INT NOT NULL, DEFAULT 1 주문 수량

5. 물리적 설계

“DB 성능을 고려해 데이터를 어떻게 저장할지 설계”

  • 인덱스, 클러스터링, 파티셔닝 등 저장 최적화
  • 디스크 I/O 최소화 설계
  • 사용 빈도 높은 컬럼 중심 접근 구조 설계

고려 요소:
→ 조회 집중? 삽입 많음? → 각각에 맞는 저장 구조 설계


 6. 구현

“설계한 구조를 실제 DB에 반영”

  • DDL(CREATE, ALTER 등) 사용
  • 테이블, 뷰, 인덱스 생성
  • 트랜잭션 프로시저/SQL까지 포함하면 완성
CREATE TABLE Orders (
  order_id INT AUTO_INCREMENT PRIMARY KEY,     -- 기본키 + 자동 증가
  customer_id INT NOT NULL,                    -- 외래키 참조 대상
  order_date DATE NOT NULL DEFAULT CURRENT_DATE, -- 기본값 설정
  total_price DECIMAL(10, 2) DEFAULT 0.00,

  -- 인덱스
  INDEX idx_customer (customer_id),
  INDEX idx_order_date (order_date),

  -- 외래키 제약조건
  FOREIGN KEY (customer_id) REFERENCES Customer(customer_id)
);

🖼️ 스키마 3계층 구조 

계층 설명 시점
외부 스키마 사용자/응용 중심 View 요구 분석 단계
개념 스키마 전체 논리적 구조 (ERD) 개념·논리적 설계
내부 스키마 물리 저장 구조 (인덱스 등) 물리적 설계 단계

 

 

반응형
LIST