반응형
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 | 고객 이름 |
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
'정보처리기사 > 2장 데이터 입출력 구현' 카테고리의 다른 글
관계대수 완전 정리 (0) | 2025.04.12 |
---|---|
무결성과 제약조건 완전 정리 (0) | 2025.04.12 |
키(Key)의 종류와 특징 완전 정리 (0) | 2025.04.12 |
릴레이션 모델의 구성 요소 완전 정복 (0) | 2025.04.12 |
데이터 모델과 E-R 다이어그램 완전 정리 (0) | 2025.04.12 |