정규화 (Normalization)
핵심 인사이트 (3줄 요약)
- 본질: 정규화 (Normalization)는 데이터베이스에서 데이터 중복을 최소화하고, 갱신 이상 (Update Anomaly), 삽입 이상 (Insert Anomaly), 삭제 이상 (Delete Anomaly)을 제거하기 위해 테이블을 체계적으로 분해하는 과정이다.
- 가치: 정규화를 통해 데이터 무결성을 보장하고, 저장 공간을 절약하며, 데이터 일관성을 유지할 수 있다.
- 융합: 정규화는 관계형 데이터베이스 설계의核心原則으로, 반정규화와 함께 성능과 무결성의 균형을 맞추는 데 활용된다.
Ⅰ. 개요 및 필요성 (Context & Necessity)
개념 정의
정규화 (Normalization)는 함수 종속성 (Functional Dependency) 분석을 기반으로 데이터 중복과 이상 현상을 제거하기 위해 테이블을 적절한 정규형 (Normal Form)에 맞게 분해하는 과정이다.
정규화가 필요한 이유
정규화되지 않은 테이블에서는 다음과 같은 문제가 발생할 수 있다.
┌─────────────────────────────────────────────────────────────────────┐
│ 정규화되지 않은 테이블의 문제점 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ [비정규 테이블: 주문목록] │
│ ┌────────┬──────┬────────┬────────┬──────────────┐ │
│ │ 주문ID │ 고객명 │ 상품명 │ 단가 │ 고객주소 │ │
│ ├────────┼──────┼────────┼────────┼──────────────┤ │
│ │ O001 │ 김철수 │ TV │ 500000 │ 서울 강남구 │ │
│ │ O002 │ 김철수 │ 냉장고 │ 800000 │ 서울 강남구 │ ← 중복! │
│ │ O003 │ 이영희 │ 세탁기 │ 600000 │ 부산 해운대구 │ │
│ └────────┴──────┴────────┴────────┴──────────────┘ │
│ │
│ 문제점: │
│ 1. 중복: 김철수의 주소가 두 번 저장 (저장 공간 낭비) │
│ 2. 갱신 이상: 김철수 주소 변경 시 두 행 모두 수정 필요 │
│ 3. 삽입 이상: 새 고객 김민수 (주문尚未, 주소만 저장) → 주문ID NULL! │
│ 4. 삭제 이상: O003 행 삭제 시 이영희 정보도 함께 삭제! │
│ │
└─────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 비정규 테이블에서는同一 고객의 주소가 여러 행에 중복 저장된다. 이로 인해 주소 변경 시 모든 행을 찾아 수정해야 하고 (갱신 이상), 아직 주문이 없는 고객 정보를 삽입하려면 주문ID를 NULL로 해야 하며 (삽입 이상), 특정 주문을 삭제하면 고객 정보까지 사라질 수 있다 (삭제 이상). 정규화는 이러한 이상 현상을 해결하기 위해 테이블을 분리하는 과정이다.
비유
정규화는 도서관 장서 정리 방법과 같다. 모든 책을 한 선반에 아무 순서 없이 쌓아두면 책을 찾기 어렵지만 (비정규), 분야별로, 作者별로, 제목별로 분리하면 (정규화) 책 관리가 훨씬 용이하다. 다만 분리된 책장을 오가는 것도 불편하듯이, 과도한 정규화는 JOIN 성능을 저하시킬 수 있다.
- **📢 섹션 요약 비유:**옷장을カテゴリー별로 정리하면 (정규화) 원하는 옷을 찾기 쉽지만, 너무 세분화하면 여러 서랍을 열어봐야 하는 것처럼, 데이터베이스도 적절한 수준까지만 정규화하는 것이 좋습니다.
Ⅱ. 함수 종속성 (Functional Dependency)
개념 정의
함수 종속성 (Functional Dependency)은 X의 값이 결정되면 Y의 값이 유일하게 결정되는 관계를 의미한다. X → Y로 표기한다.
┌─────────────────────────────────────────────────────────────────────┐
│ 함수 종속성 (Functional Dependency) │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ X → Y (X가 Y를 함수적으로 결정) │
│ │
│ 예시: │
│ • 고객ID → 고객명 (고객ID가 결정되면 고객명도 유일하게 결정) │
│ • 학번 → (이름, 학과, 학년) │
│ │
│ [형식적 정의] │
│ R表的 임의의 두 투플 t1, t2에 대해, │
│ t1[X] = t2[X]이면 t1[Y] = t2[Y]이다. │
│ │
└─────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 함수 종속성은 "X가 동일하면 Y도 동일하다"는 관계다. 고객ID가 같으면 고객명은 항상 동일하다. 그러나 상품명이 같더라도 단가는 다를 수 있으므로 (같은 商品名이라도 할인 적용에 따라 가격이 달라질 수 있음), 상품명 → 단가는 성립하지 않는다.
완전 함수 종속성 vs 부분 종속성
완전 함수 종속성: X 전체에 대해 종속되며, X의 어떠한 부분집합에도 종속되지 않음
부분 종속성: 복합 키의 일부에만 종속되는 것
┌─────────────────────────────────────────────────────────────────────┐
│ 완전 종속 vs 부분 종속 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ [주문항목 (주문ID, 상품ID) → (수량, 단가, 상품명)] │
│ │
│ • (주문ID, 상품ID) → 수량: 완전 종속 (复合键 전체에 종속) │
│ • (주문ID, 상품ID) → 단가: 완전 종속 │
│ • (주문ID, 상품ID) → 상품명: 부분 종속! (상품ID에만 종속) │
│ │
│ ※ 부분 종속이 있으면 정규화가 필요 (2NF 이상) │
│ │
└─────────────────────────────────────────────────────────────────────┘
- **📢 섹션 요약 비유:**학번과 과목코드가 모두 있어야 성적을 알 수 있지만 (완전 종속), 학생 이름은 학번만으로 알 수 있는 것과 같습니다 (부분 종속).
Ⅲ. 정규형 (Normal Form)
정규형은 정규화의 수준을 나타내며, 숫자가 높을수록 엄격한 정규화를 의미한다.
┌─────────────────────────────────────────────────────────────────────┐
│ 정규형의 단계와 특징 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 1NF (제1정규형) │
│ ───────────────────────────────────────────────────── │
│ • 모든 속성의 값이 원자값 (Atomic Value) │
│ • 반복 그룹 (다중값 속성) 없음 │
│ │
│ 2NF (제2정규형) │
│ ───────────────────────────────────────────────────── │
│ • 1NF를 만족 │
│ • 모든 비키 속성이 기본 키에 완전 종속 (부분 종속 제거) │
│ │
│ 3NF (제3정규형) │
│ ───────────────────────────────────────────────────── │
│ • 2NF를 만족 │
│ • 이행적 종속 제거 (비키 속성이 기본 키를 통해 간접 종속 제거) │
│ │
│ BCNF (보이스-코드 정규형) │
│ ───────────────────────────────────────────────────── │
│ • 3NF를 만족 │
│ • 모든 결정자가 후보 키어야 함 │
│ │
│ 4NF (제4정규형) │
│ ───────────────────────────────────────────────────── │
│ • BCNF를 만족 │
│ • 다중값 종속성 제거 │
│ │
│ 5NF (제5정규형) │
│ ───────────────────────────────────────────────────── │
│ • 4NF를 만족 │
│ • 결합 종속성 제거 │
│ │
└─────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 정규형은进阶하는 구조로, 각 단계는 이전 단계를포함한다. 1NF는 기본적인 원자값 조건이고, 2NF는 부분 종속성을, 3NF는 이행적 종속성을 제거한다. BCNF는 3NF보다 더 엄격하며, 4NF와 5NF는 특수한 경우에만 적용된다. 대부분의 실무에서는 3NF 또는 BCNF까지 적용하면 충분하다.
Ⅳ. 실무 적용 및 기술사적 판단
실무 시나리오
-
시나리오 — 주문 관리 시스템: 주문, 주문항목, 상품, 고객 테이블로 정규화하면 데이터 중복이 제거되고, 각 테이블의 책임이 명확해진다.
-
시나리오 — 과도한 정규화: 지나치게 세분화된 테이블은 JOIN이 잦아 성능 저하를 유발한다. 이 경우 반정규화를 통해 적절히 중복을許容한다.
도입 체크리스트
- 기술적: 함수 종속성 분석을 수행했는가? 기본 키를 명확히 정의했는가?
- 운영·보안적: 정규화 수준이 조회 성능에 미치는 영향을 고려했는가?
안티패턴
-
정규화 부족: 중복 데이터와 갱신 이상 발생
-
과도한 정규화: JOIN 과다로 성능 저하
-
**📢 섹션 요약 비유:**음식의 재료separating가 너무 세분화되면 조리 시간이 오래 걸리는 것처럼, 정규화도 적절한 수준에서 맞는 것이 중요합니다.
Ⅴ. 기대효과 및 결론
정량/정성 기대효과
| 구분 | 비정규화 | 정규화 적용 | 개선 효과 |
|---|---|---|---|
| 정량 | 데이터 중복률 30~40% | 중복률 5% 이하 | 저장 공간 70% 절감 |
| 정성 | 갱신 이상 발생 | 이상 현상 제거 | 데이터 무결성 향상 |
미래 전망
-
적응형 정규화: AI가Workload 패턴을 分析하여 정규화와 반정규화 사이의 최적점을 자동 탐색
-
자동 정규화 도구: ER 다이어그램으로부터 정규형을自動檢证하고 개선案을 제시하는 도구 발전
-
**📢 섹션 요약 비유:**음식 재료의 손질 정도는 요리의 종류에 따라 다른 것처럼, 데이터베이스의 정규화 수준도업무特性에 맞게 조정되어야 합니다.
📌 관련 개념 맵 (Knowledge Graph)
| 개념 명칭 | 관계 및 시너지 설명 |
|---|---|
| 함수 종속성 | X→Y 관계로, 정규화의理论基础이다. |
| 기본 키 | 투플을 유일하게 식별하는 속성으로, 함수 종속성의 기준이 된다. |
| 갱신 이상 | 데이터 중복으로 인해 발생하는 불일치 현상이다. |
| 반정규화 | 성능을 위해 의도적으로 정규화를 완화하는 것이다. |
👶 어린이를 위한 3줄 비유 설명
- 정규화는 장난감 정리 방법이에요. 모든 장난감을 한 상자에 넣으면 찾기 어렵지만, 장난감 종류별로 (자동차, 인형, 블록) 나누어 정리하면 찾기가 쉬워져요.
- 만약 자동차 장난감의 색깔이 여러 번 적혀 있으면, 색깔을 바꿀 때 모든 자동차를 다 바꿔야 하는 번거로움이 있어요 (갱신 이상).
- 정리할 때 종류별로 나누면 (정규화), 각각의 정보가 한 곳에만 있어서管理하기가 좋아요!