데이터 베이스...즉 DB에 대해서 “무슨 용어부터 공부해야 해?” 싶을 텐데…
그런 고민을 해결하기 위해서 작성해봤어요!
flowchart TD
A[요구사항 분석] --> B[개념적 모델링]
B --> C[논리적 모델링]
C --> D[물리적 모델링]
D --> E[실제 DB 구축]
엔티티(Entity)
속성(Attribute)
인스턴스(Instance)
{회원ID:1001, 이름:'홍길동', 이메일:'hong@example.com'} 관계(Relationship)
| 카디널리티 | 참여도 | 기호 | 설명 |
|---|---|---|---|
| 1:1 | 필수 | |–| | 양쪽 모두 반드시 하나만 연결 |
| 1:1 | 선택 | |–○ | 한쪽은 선택적으로 연결 가능 |
| 1:N | 필수 | |–< | N 쪽이 반드시 하나 이상 연결 |
| 1:N | 선택 | |–○< | N 쪽이 0개 이상 연결 |
예) 회원(1) — 작성(◆) —< 블로그(N)
회원은 블로그를 0개 이상 작성할 수 있어 (1:0..N)
식별자 지정(Primary Key)
정규화(Normalization)
관계 설정(Foreign Key)
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)도 고민해봐!
-- 주문 테이블에 인덱스 추가
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 로그와 모니터링 툴로 쿼리 패턴 분석 후 튜닝하자!
┌────────┐ 1:N 필수 ┌─────────┐
│ 회원 │───────────────────<│ 주문 │
└────────┘ └─────────┘
│ 1:1 선택 │ 1:1 필수
│ │
(○) (|)
│ │
┌────────┐ 1:1 필수 ┌─────────┐
│ 프로필 │────────────────────│ 회원 │
└────────┘ └─────────┘
< = 다수 작성일:2025.07.16
작성자:발라