<aside> 📖
학습 목표
정규화(Normalization)는 관계형 데이터베이스 설계에서 데이터의 중복을 줄이고 무결성을 높이기 위한 과정이다. 이는 테이블 간의 종속성을 제거하거나 분리하여, 삽입/수정/삭제 이상(Anomaly) 을 방지하고, 논리적으로 일관된 데이터 구조를 만드는 데 목적이 있다.
정규화는 테이블을 목적에 맞게 분해하고 재구성하여 데이터 중복을 최소화하고 무결성을 보장하는 일련의 과정이다.
| 구분 | 설명 |
|---|---|
| 중복 제거 | 동일한 데이터의 반복을 줄여 저장 공간과 관리 부담 감소 |
| 무결성 향상 | 이상 현상 방지 (삽입, 삭제, 갱신 이상) |
| 유지보수 용이성 | 구조가 명확하므로 유지보수가 쉬워짐 |
| 정규형 | 조건 | 목적 |
|---|---|---|
| 1NF | 모든 속성은 원자값만 포함 | 중복 필드 제거, 원자성 보장 |
| 2NF | 1NF + 모든 비키가 기본 키에 완전 함수적 종속 | 부분 종속 제거 |
| 3NF | 2NF + 비키 간 이행적 종속 제거 | 이행 종속 제거 |
| BCNF | 3NF + 모든 결정자가 후보 키 | 결정자 이상 제거 |
1NF(제1정규형)은 데이터베이스 정규화의 가장 기본적인 단계입니다. 이는 모든 테이블의 모든 열이 원자적인 값을 가져야하고, 각 행이 고유한 키로 식별되어야 한다는 것을 의미합니다.
그럼 실제 데이터를 가지고 이를 설명해보겠습니다.
예를 들어, 학생들의 과목별 성적을 기록하는 테이블이 있다고 가정해봅시다. 이 테이블은 다음과 같이 구성될 수 있습니다.
| 학생ID | 이름 | 과목 |
|---|---|---|
| 1 | 김철수 | 수학, 과학 |
| 2 | 이영희 | 영어, 수학 |
| 3 | 박지수 | 과학, 역사 |
이 테이블은 1NF를 만족하지 않습니다. 왜냐하면 "과목" 열이 원자적이지 않기 때문입니다. 여러 과목이 하나의 열에 포함되어 있습니다.
1NF를 만족시키기 위해 테이블을 다음과 같이 변환할 수 있습니다.
| 학생ID | 이름 | 과목 |
|---|---|---|
| 1 | 김철수 | 수학 |
| 1 | 김철수 | 과학 |
| 2 | 이영희 | 영어 |
| 2 | 이영희 | 수학 |
| 3 | 박지수 | 과학 |
| 3 | 박지수 | 역사 |
이제 모든 열이 원자적인 값을 가지며, 각 행은 "학생ID"와 "과목"의 조합으로 고유하게 식별됩니다. 따라서 이 테이블은 1NF를 만족합니다.