<aside> 📖

학습 목표

1. 정규화 개요

정규화(Normalization)는 관계형 데이터베이스 설계에서 데이터의 중복을 줄이고 무결성을 높이기 위한 과정이다. 이는 테이블 간의 종속성을 제거하거나 분리하여, 삽입/수정/삭제 이상(Anomaly) 을 방지하고, 논리적으로 일관된 데이터 구조를 만드는 데 목적이 있다.

1-1. 정규화란?

정규화는 테이블을 목적에 맞게 분해하고 재구성하여 데이터 중복을 최소화하고 무결성을 보장하는 일련의 과정이다.

구분 설명
중복 제거 동일한 데이터의 반복을 줄여 저장 공간과 관리 부담 감소
무결성 향상 이상 현상 방지 (삽입, 삭제, 갱신 이상)
유지보수 용이성 구조가 명확하므로 유지보수가 쉬워짐

1-2. 정규화 유형

정규형 조건 목적
1NF 모든 속성은 원자값만 포함 중복 필드 제거, 원자성 보장
2NF 1NF + 모든 비키가 기본 키에 완전 함수적 종속 부분 종속 제거
3NF 2NF + 비키 간 이행적 종속 제거 이행 종속 제거
BCNF 3NF + 모든 결정자가 후보 키 결정자 이상 제거

2. 정규화 단계별 사례 및 적용

2-1. 제 1정규형을 위반한 사례 - 제 1정규화 대상(1NF)

1NF(제1정규형)은 데이터베이스 정규화의 가장 기본적인 단계입니다. 이는 모든 테이블의 모든 열이 원자적인 값을 가져야하고, 각 행이 고유한 키로 식별되어야 한다는 것을 의미합니다.

그럼 실제 데이터를 가지고 이를 설명해보겠습니다.

예를 들어, 학생들의 과목별 성적을 기록하는 테이블이 있다고 가정해봅시다. 이 테이블은 다음과 같이 구성될 수 있습니다.

학생ID 이름 과목
1 김철수 수학, 과학
2 이영희 영어, 수학
3 박지수 과학, 역사

이 테이블은 1NF를 만족하지 않습니다. 왜냐하면 "과목" 열이 원자적이지 않기 때문입니다. 여러 과목이 하나의 열에 포함되어 있습니다.

1NF를 만족시키기 위해 테이블을 다음과 같이 변환할 수 있습니다.

학생ID 이름 과목
1 김철수 수학
1 김철수 과학
2 이영희 영어
2 이영희 수학
3 박지수 과학
3 박지수 역사

이제 모든 열이 원자적인 값을 가지며, 각 행은 "학생ID"와 "과목"의 조합으로 고유하게 식별됩니다. 따라서 이 테이블은 1NF를 만족합니다.