🧠 SQL 정규화(Normalization) 완전 정복: 제1정규형 ~ 제3정규형까지!
안녕하세요! 오늘은 SQLD 시험과 실무에서 모두 중요한 데이터베이스 정규화(Normalization) 개념에 대해 다뤄보겠습니다.
정규화란? 👉 데이터 중복을 제거하고 이상(anomaly)을 방지하여 데이터베이스 구조를 논리적으로 정리하는 과정입니다.
이번 글에서는 제1정규형부터 제3정규형까지 예제와 함께 아주 자세히 설명드릴게요. 📚✨
✅ 정규화가 필요한 이유
정규화가 되지 않은 테이블은 아래와 같은 문제를 일으킬 수 있습니다:
- 삽입 이상: 일부 속성만 입력할 수 없음
- 삭제 이상: 일부 데이터를 삭제하면 관련 정보도 같이 사라짐
- 갱신 이상: 데이터를 일부 수정할 때 여러 군데 수정을 해야 함 → 무결성 깨질 수 있음
🧩 예제 테이블 (비정규형)
학번 | 이름 | 연락처 | 수강과목 |
1001 | 홍길동 | 010-1234-5678 | DB, 운영체제 |
1002 | 김영희 | 010-2345-6789 | 자료구조 |
1003 | 이철수 | 010-3456-7890 | DB, 자료구조, 통계학 |
위 테이블은 비정규형(unnormalized form)입니다. 왜냐하면 하나의 셀(수강과목)에 여러 개의 값이 들어있기 때문입니다. 그럼 정규화를 단계별로 진행해볼게요!
🔹 제1정규형 (1NF: First Normal Form)
정의: 모든 속성의 값이 원자값(Atomic Value)을 가져야 한다.
하나의 셀에는 하나의 값만 존재해야 함
📌 변환 후 테이블
학번 | 이름 | 연락처 | 수강과목 |
1001 | 홍길동 | 010-1234-5678 | DB |
1001 | 홍길동 | 010-1234-5678 | 운영체제 |
1002 | 김영희 | 010-2345-6789 | 자료구조 |
1003 | 이철수 | 010-3456-7890 | DB |
1003 | 이철수 | 010-3456-7890 | 자료구조 |
1003 | 이철수 | 010-3456-7890 | 통계학 |
✅ 효과
- 원자값만 남기므로 검색이 쉬워짐
- 하지만 여전히 중복된 정보(이름, 연락처 등)가 존재함
🔹 제2정규형 (2NF: Second Normal Form)
정의: 제1정규형을 만족하면서, 기본키의 부분집합이 결정자가 되는 종속성이 없어야 함 (부분함수 종속 제거)
즉, 복합키인 경우 부분키에만 종속된 속성 제거
📌 예시 분석
- 기본키: (학번, 수강과목)
- 이름, 연락처는 학번에만 종속되어 있음 → 부분함수 종속 → 2NF 위반!
📌 2NF로 분해된 테이블
학생 테이블
학번 | 이름 | 연락처 |
1001 | 홍길동 | 010-1234-5678 |
1002 | 김영희 | 010-2345-6789 |
1003 | 이철수 | 010-3456-7890 |
수강 테이블
학번 | 수강과목 |
1001 | DB |
1001 | 운영체제 |
1002 | 자료구조 |
1003 | DB |
1003 | 자료구조 |
1003 | 통계학 |
✅ 효과
- 부분함수 종속 제거
- 중복 데이터가 줄어듦
🔹 제3정규형 (3NF: Third Normal Form)
정의: 제2정규형을 만족하면서, 이행적 함수 종속이 없어야 함
A → B, B → C 이면 A → C는 이행적 종속. 이걸 제거해야 3NF!
📌 예시 테이블 (추가된 속성)
학번 | 수강과목 | 교수명 |
1001 | DB | 김교수 |
1002 | 자료구조 | 이교수 |
1003 | 통계학 | 박교수 |
- 교수명은 수강과목에 따라 결정됨 → 학번 → 수강과목 → 교수명 → 이행적 종속!
📌 3NF로 분해된 테이블
수강 테이블
학번 | 수강과목 |
1001 | DB |
1002 | 자료구조 |
1003 | 통계학 |
과목 테이블
수강과목 | 교수명 |
DB | 김교수 |
자료구조 | 이교수 |
통계학 | 박교수 |
✅ 효과
- 이행적 종속 제거 → 유지보수 편해짐
- 데이터 무결성 보장
📝 마무리 정리
정규형 | 정의 | 목적 | 제거대상 |
1NF | 모든 속성이 원자값 | 셀마다 하나의 값 | 반복 속성 (다중값) |
2NF | 부분함수 종속 제거 | 키에 완전 종속된 속성만 유지 | 부분 종속 |
3NF | 이행적 함수 종속 제거 | 비속성 간 종속 제거 | 이행 종속 |
정규화는 단순히 암기하는 게 아니라, 데이터를 얼마나 구조적으로 잘 관리할 수 있느냐를 보여주는 지표입니다.
'자격증 > SQLD' 카테고리의 다른 글
[SQLD/자격증] 정규표현식(Regular Expression) (0) | 2025.05.25 |
---|---|
[SQLD/자격증] PIVOT / UNPIVOT 완전 정복! (0) | 2025.05.25 |
[SQLD/자격증] 계층형 질의 완벽 정리 (0) | 2025.05.25 |
[SQLD/자격증] 행 관련 순서함수(오프셋 함수) 완벽 정리 (0) | 2025.05.25 |
[SQLD/자격증] 윈도우 함수의 프레임절(Frame Clause) 완벽 이해하기 (0) | 2025.05.25 |