2025-11-09
오늘 배운 것
✅ 한 줄 정의
데이터의 중복을 제거하고,
데이터 간의 논리적 종속 관계를 정리하여
데이터베이스의 구조를 체계적으로 정리하는 과정
→ 결국엔 데이터 무결성(정합성)을 높이고
→ 유지 보수를 더 쉽게 만들기 위함이야!
🔁 왜 정규화가 필요할까?
| 문제 | 발생 이유 |
|---|---|
| 🔁 데이터 중복 | 같은 정보가 여러 테이블/컬럼에 존재 |
| 🐛 이상(Anomaly) 발생 | 삽입/수정/삭제 시 의도치 않은 오류 발생 |
| 🧹 설계가 지저분 | 한 테이블에 여러 역할이 섞여 있음 |
🔥 이상 현상의 종류 (Anomaly)
| 종류 | 설명 |
|---|---|
| 삽입 이상 | 어떤 데이터를 넣기 위해 불필요한 값도 강제로 입력해야 함 |
| 갱신 이상 | 중복된 데이터를 변경할 때 하나만 바꾸면 불일치 발생 |
| 삭제 이상 | 의도하지 않은 정보까지 삭제되는 경우 |
🧩 정규화 단계
1️⃣ 제1정규형 (1NF)
모든 컬럼이 원자값(Atomic Value)을 가져야 함
→ 반복되는 그룹은 테이블을 분리해야 함!
📌 즉, 한 셀에 여러 값 금지
❌ hobby: "축구, 농구"
✅ hobby 테이블로 분리!
2️⃣ 제2정규형 (2NF)
1NF 만족 + 부분 함수 종속 제거
📌 “복합키일 때만” 신경 씀!
[수강 테이블]
PK: (학생ID, 과목ID)
점수 → ✅ OK
학생이름 → ❌ (학생ID에만 종속 → 분리해야 함!)
3️⃣ 제3정규형 (3NF)
2NF 만족 + 이행적 함수 종속 제거
📌 기본키에 종속된 컬럼이
또 다른 컬럼에 종속되면 분리!
[학생 테이블]
학번 (PK), 학과코드, 학과이름 ❌
→ 학과이름은 학과코드에 종속! → 학과 테이블로 분리해야 함