데이터베이스 설계에서 가장 자주 듣게 되는 말 중 하나가 바로 "정규화(Normalization)"입니다. 정규화는 단순한 이론이 아니라, 현실 세계의 데이터 이상 현상을 방지하고 구조를 정리하는 강력한 도구입니다. 이번 글에서는 정규화의 개념과 각 단계, 그리고 정규화를 하지 않으면 어떤 문제가 발생하는지 쉽게 설명해보겠습니다.
1. 정규화란 무엇인가?
정규화는 데이터의 중복을 제거하고, 데이터 간의 논리적인 관계를 명확히 하기 위한 데이터베이스 구조화 과정입니다.
정규화의 목적
- 중복 데이터 제거
- 데이터 무결성 유지
- 이상 현상 방지
- 구조의 일관성과 유지보수성 향상
2. 정규화를 하지 않으면 생기는 문제: 이상 현상(Anomaly)
정규화가 왜 중요한지를 이해하려면, 먼저 이상 현상이 무엇인지 알아야 합니다.
삽입 이상 (Insertion Anomaly)
- 특정 정보를 추가하지 못하는 현상
- 예: 학생 테이블에 과목 정보가 없어 학생을 등록할 수 없음
삭제 이상 (Deletion Anomaly)
- 한 데이터를 삭제하면 관련된 다른 정보도 함께 사라짐
- 예: 한 학생을 삭제했더니, 해당 과목 정보도 같이 사라짐
갱신 이상 (Update Anomaly)
- 동일한 정보를 여러 곳에 기록 → 수정 시 누락 위험
- 예: 교수 연락처가 여러 행에 존재 → 한 곳만 수정되면 정보 불일치
이러한 문제들은 모두 테이블에 중복 데이터가 존재할 때 발생합니다. 이걸 방지해주는 것이 바로 정규화입니다.
3. 정규화의 단계 (1NF ~ 3NF)
제1정규형 (1NF)
- 원자값(Atomic Value)만 저장
- 즉, 컬럼 안에 리스트나 복합값 금지
- 반복되는 그룹 제거
잘못된 예: 과목 = “영어, 수학”
올바른 예: 각 과목을 별도 행으로 분리
제2정규형 (2NF)
- 1NF를 만족하고
- 부분 함수 종속 제거 (기본키의 일부분에만 종속된 컬럼 제거)
[학생ID, 과목코드] → 성적 ✅
[학생ID] → 이름 ❌ (부분 종속)
→ 학생 정보를 별도 테이블로 분리!
제3정규형 (3NF)
- 2NF를 만족하고
- 이행적 종속 제거 (A → B, B → C일 때 A → C 제거)
[학생ID] → [학과코드] → [학과명] ❌
→ 학과 정보를 별도 테이블로 분리
그 외 고급 정규화 (시험에서 출제 빈도 낮음)
- BCNF (보이스-코드 정규형)
- 제4정규형, 제5정규형
4. 정규화와 성능의 균형
정규화는 데이터 구조의 정합성을 높여주지만, 너무 많이 정규화하면 JOIN이 많아져 성능 저하가 발생할 수 있습니다.
그래서 현실에서는?
- 업데이트가 자주 발생하는 OLTP 시스템 → 정규화 선호
- 조회 위주인 OLAP 시스템 → 일부 비정규화 적용
정규화와 비정규화의 균형은 시스템 목적에 따라 결정되어야 합니다.
마무리 및 요약
- 정규화는 중복을 제거하고 이상 현상을 방지하는 데이터 모델링 기법입니다.
- 제1정규형부터 제3정규형까지는 실무와 시험에서 모두 중요합니다.
- 하지만 무조건 정규화만 고집하지 말고, 상황에 따라 비정규화도 고려해야 합니다.
🎯 TIP: SQLD 시험에서는 정규화 단계별 정의와 이상 현상 예시가 자주 출제됩니다.
"어떤 현상이 발생했는가?" 또는 "이 테이블은 몇 정규형인가?"라는 유형이 대표적입니다.
'프로그래밍' 카테고리의 다른 글
SQL 기본 문법 총정리 (DDL, DML, DCL) (0) | 2025.08.02 |
---|---|
데이터 무결성과 제약조건: 정확하고 신뢰할 수 있는 데이터베이스의 기반 (1) | 2025.08.02 |
데이터 모델과 성능: 성능을 고려한 데이터베이스 모델링 전략 (1) | 2025.08.01 |
데이터 모델의 이해 - SQLD 필수 개념 정리 (2) | 2025.08.01 |
SQLD 자격증 완전 정복 1편: 자격증 개요 및 시험 정보 (1) | 2025.07.31 |