정규화란?
<aside>
💡
데이터 중복을 최소화하고, 논리적 구조를 체계적으로 정리하기 위한 데이터베이스
설계 방법
즉, 테이블을 잘게 나누고 관계를 설정해서 중복, 이상현상(Anomaly)을 방지
</aside>
정규화의 목적
- 데이터 중복 제거
- 삽입, 삭제, 갱신 이상 방지
- 데이터 무결성 유지
- 데이터 구조의 일관성 향상
주요 이상(Anomaly)의 예시
종류 |
설명 |
예시 |
삽입 이상 |
일부 정보만 넣고 싶어도 다른 정보까지 강제로 입력해야 함 |
과목을 추가하려면 학생 정보도 입력해야 함 |
삭제 이상 |
일부 정보만 지우고 싶은데 중요한 데이터도 같이 지워짐 |
한 학생을 삭제했더니 과목 정보도 사라짐 |
갱신 이상 |
같은 정보가 여러 군데 있어 수정할 때 전부 바꿔야 함 |
교수 이름이 여러 줄에 중복됨 |
정규화 단계
1NF (제1정규형: 원자값)
- 모든 컬럼이 원자값(더 이상 나눌 수 없는 값)을 가져야 함
- ❌ 잘못된 예: 한 셀에 “김밥, 떡볶이” 같이 복수 값 저장
- ✅ 해결: 값을 분리해서 따로 저장
2NF (제2정규형: 부분 함수 종속 제거)
- 기본키가 여러 개인 경우, 일부 속성(컬럼)이 기본키의 '일부'에만 의존하면 안 됨
- ❌ 잘못된 예: (학생ID, 과목명) → 교수명
- ✅ 해결: 교수 정보를 따로 테이블로 분리
3NF (제3정규형: 이행 함수 종속 제거)