Computer Science/Database
[DB] 05. 정규화(Normalization)
GWDEVEL
2026. 2. 4. 22:10
[DB] 05. 정규화(Normalization)
1. 정규화란 무엇인가
정규화는 데이터를 여러 테이블로 나누는 과정이다.
목적은 단순하다. 중복 데이터를 제거하고, 데이터가 서로 어긋나는 상황을 막기 위함이다.
처음 테이블을 설계할 때는 한 테이블에 모든 정보를 넣는 것이 편해 보인다. 하지만 데이터가 쌓이기 시작하면 바로 문제가 생긴다.
2. 정규화 전 테이블 구조
아래는 주문과 회원 정보를 하나의 테이블에 모두 저장한 예시다.
orders (정규화 전)
| order_id | user_name | user_email | product | price |
|---|---|---|---|---|
| 1 | 홍길동 | hong@test.com | 노트북 | 1200000 |
| 2 | 홍길동 | hong@test.com | 마우스 | 30000 |
이 구조에서는 같은 회원의 이름과 이메일이 주문 수만큼 반복된다.
3. 정규화 전 구조의 문제점
- 이메일을 변경하면 여러 행을 수정해야 한다
- 일부 행만 수정되면 데이터가 서로 달라진다
- 주문이 늘어날수록 중복 데이터가 계속 증가한다
이런 현상을 이상 현상(Anomaly)이라고 한다.
4. 정규화의 방향
정규화의 핵심은 명확하다.
- 회원 정보는 회원 테이블로 분리한다
- 주문 정보는 주문 테이블로 분리한다
- 두 테이블은 키 값으로 연결한다
즉, 각 테이블이 하나의 역할만 가지도록 만든다.
5. 정규화 후 테이블 구조
users
| id | name | |
|---|---|---|
| 1 | 홍길동 | hong@test.com |
orders
| id | user_id | product | price |
|---|---|---|---|
| 1 | 1 | 노트북 | 1200000 |
| 2 | 1 | 마우스 | 30000 |
6. 제1정규형 (1NF)
제1정규형은 모든 컬럼이 원자값만 가져야 한다는 규칙이다.
한 컬럼에 여러 값이 들어가면 1정규형을 만족하지 않는다.
7. 제2정규형 (2NF)
제2정규형은 부분 종속을 제거하는 단계다.
기본 키의 일부에만 의존하는 컬럼이 있다면, 테이블을 분리해야 한다.
8. 제3정규형 (3NF)
제3정규형은 이행 종속을 제거하는 단계다.
비기본 키 컬럼이 다른 비기본 키 컬럼에 의존하면 구조를 다시 나눠야 한다.
9. 정리
- 정규화 전에는 데이터가 한 테이블에 섞여 있다
- 정규화는 중복과 이상 현상을 막기 위한 설계 과정이다
- 1~3정규형은 구조를 점검하는 기준이다
- 정규화의 목적은 데이터 안정성이다