정규화란?
관계형 데이터베이스에서 데이터 중복을 최소화하고, 데이터 구조를 체계적으로 설계하기 위해 테이블을 분해하고 재구성하는 과정입니다.
[정규화의 목표]
- 데이터 중복 최소화
- 데이터 무결성 유지
- 삽입(Insert), 수정(Update), 삭제(Delete) 이상(Anomaly) 방지
- 데이터 구조의 일관성 확보
제1정규형 (1NF)
- 테이블은 모든 속성이 원자값을 가져야 한다.
- 중첩 데이터, 반복 그룹 제거
| 학생 ID | 이름 | 연락처 |
| 1 | 홍길동 | 010-1234, 010-5678 |
→ 1NF 적용 후
| 학생ID | 이름 | 연락처 |
| 1 | 홍길동 | 010-1234 |
| 1 | 홍길동 | 010-5678 |
제2정규형 (2NF)
- 부분 함수 종속 제거
- 기본키의 일부에만 종속되는 속성을 분리한다.
- 복합키 사용 시 해당된다.
| 학번 | 과목코드 | 교수명|성적 |
- (학번,과목코드) →성적
- 과목코드 →교수명(부분 종속)
→ 2NF 적용 후 분리
학생-성적 테이블
| 학번 | 과목코드 | 성적 |
과목 테이블
| 과목코드 | 교수명 |
제3정규형 (3NF)
- 이행적 함수 종속 제거
- 기본키가 아닌 다른 속성에 종속되는 속성을 분리한다.
| 직원ID | 부서ID | 부서명 |
- 직원ID → 부서ID
- 부서ID → 부서명 (이행적 종속)
→ 3NF 적용 후 분리
직원 테이블
| 직원ID | 부서ID |
부서 테이블
| 부서ID | 부서명 |
BCNF
- 모든 결정자가 후보키일 것
- (예시) 복합키가 여러 개 존재하거나 후보키가 여러 개인 경우 추가 분해 필요하다.
| 학번(StudentID) | 강의실(Room) | 교수(Professor) |
| 1001 | 101호 | 김교수 |
| 1002 | 102호 | 이교수 |
| 1003 | 101호 | 김교수 |
→ BCNF 적용 후 분리
| 학번(StudentID) | 강의실(Room) |
| 1001 | 101호 |
| 1002 | 102호 |
| 1003 | 101호 |
| 강의실(Room) | 교수(Professor) |
| 101호 | 김교수 |
| 102호 | 이교수 |
제4정규형 (4NF)
- 다치 종속 제거
- 한 테이블에 여러 독립적인 다중 값이 존재하면 분리한다.
제5정규형 (5NF)
- 조인 종속 제거
- 테이블을 분해했다가 조인할 때 정보 손실이 없는 상태
정규화의 장점과 단점
장점
- 데이터 중복 감소
- 데이터 무결성 향상
- 테이블 구조의 논리적 설계
단점
- 테이블 수 증가 → JOIN 연산 많아져 성능 저하 가능성
- 시스템 규모나 상황에 따라 반정규화(Denormalization) 를 고려하기도 함
따라서 정규화는 안정적이고 일관성 있는 데이터베이스를 구축하고, 시스템의 확장성과 유지보수를 용이하게 만드는 핵심 설계 원칙이다.
'개발자 면접 노트' 카테고리의 다른 글
| MyBatis vs JPA (2) | 2025.06.26 |
|---|---|
| RESTful API 설계의 핵심 원칙 (0) | 2025.06.26 |
| HTTP 상태코드 (0) | 2025.06.25 |
| MVC 패턴 (0) | 2025.06.25 |
| Kotlin과 같은 등급은 Java인가 Spring인가? (3) | 2025.06.25 |