정규화란(Normalization)
데이터의 중복을 최소화하고, 데이터 삽입, 수정, 삭제 시 이상(Anomaly)이 발생하지 않도록 테이블을 구조화하는 과정입니다.
즉, 데이터베이스를 안정적이고 일관성 있게 설계하기 위한 규칙이라고 할 수 있습니다.
정규화의 목적
- 데이터 중복 최소화
- 삽입, 삭제, 갱신 이상 방지
- 데이터 무결성 유지
- 데이터 관리 효율성 향상
정규화 단계
제1정규형 (1NF) - 원자값
- 테이블의 모든 속성은 더 이상 쪼갤 수 없는 단일 값(Atomic Value) 을 가져야 한다.
- 하나의 셀에 여러 개의 값이 들어가 있으면 안 된다.
예시
| 학생ID | 이름 | 전화번호 |
| 1 | 홍길동 | 010-1234-5678 |
→ 전화번호를 하나씩 분리해야 함.
| 학생ID | 이름 | 전화번호 |
| 1 | 홍길동 | 010-1234-5678 |
| 1 | 홍길동 | 010-9876-5432 |
제2정규형 (2NF) - 부분 함수 종속 제거
- 1NF를 만족해야 함.
- 기본키의 "일부" 속성에만 종속되는 속성을 제거해야 한다.
- 즉, 기본키 전체에 대해 종속되도록 만든다.
여기서 헷갈리지 말아야 할 것!
- 기본키가 복합키(2개 이상의 컬럼 조합)일 때만 부분 종속이 문제된다.
- 기본키 일부로만 결정되는 속성은 다른 테이블로 분리해야 한다.
예시
| 학생ID | 과목코드 | 과목명 |
| 1 | MATH01 | 수학 |
| 1 | ENG01 | 영어 |
→ 과목명은 과목코드만으로 결정 가능하므로 과목 테이블로 분리해야 함.
과목 테이블
| 과목코드 | 과목명 |
| MATH01 | 수학 |
| ENG01 | 영어 |
수강 테이블
| 학생ID | 과목코드 |
| 1 | MATH01 |
| 1 | ENG01 |
제3정규형 (3NF) - 이행 함수 종속 제거
- 2NF를 만족해야 함.
- 기본키가 아닌 다른 속성을 통해 또 다른 속성이 결정되면 안 된다.
여기서 헷갈리지 말아야 할 것!
- 기본키 외 다른 컬럼 간에도 종속성이 있으면 분리해야 한다.
- 즉, 기본키 → A → B 형태가 있으면 B를 따로 빼야 한다.
예시
| 학생ID | 학과ID | 학과명 |
| 1 | CSE | 컴퓨터공학과 |
→ 학과명은 학과ID를 통해 결정되므로, 학과 정보를 따로 테이블로 분리해야 함.
학생 테이블
| 학생ID | 학과ID |
| 1 | CSE |
학과 테이블
| 학과ID | 학과명 |
| CSE | 컴퓨터공학과 |
- 2NF: 기본키의 일부에만 종속되면 안 된다 → 복합키 문제
- 3NF: 기본키 외 다른 컬럼을 통해 또 다른 컬럼이 결정되면 안 된다 → 이행 종속 문제
- 2NF는 기본키에 집중! (부분 종속 제거)
- 3NF는 기본키 말고 다른 컬럼들까지 의심! (이행 종속 제거)
BCNF (보이스-코드 정규형)
- 3NF를 만족하면서, 모든 결정자가 후보키(Candidate Key)여야 한다.
예시 교수ID와 강의실 번호로 강의시간이 결정되는데, 강의실 번호만으로도 강의시간이 결정된다면? → 분리 필요.
제4정규형 (4NF) - 다치 종속 제거
- 한 테이블에 하나의 주제만 있도록 다치 종속(Multivalued Dependency)을 제거한다.
예시
| 학생ID | 수업 | 동아리 |
| 1 | 수학 | 농구부 |
| 1 | 영어 | 농구부 |
| 1 | 수학 | 합창단 |
| 1 | 영어 | 합창단 |
→ 수업과 동아리를 별도의 테이블로 분리해야 함.
제5정규형 (5NF) - 조인 종속 제거
- 테이블을 조인했을 때 원래 데이터를 잃지 않고 복원할 수 있어야 한다.
예시 제품, 부품, 공급업체 관계에서 복합적인 조인관계가 있을 때, 무손실 분해가 필요함.
정규화가 필요한 이유: 이상(Anomaly) 방지
정규화를 하지 않으면 다음과 같은 문제가 생깁니다.
| 종류 | 설명 |
| 삽입 이상(Insertion Anomaly) | 데이터 추가 시 불필요한 값까지 입력해야 하는 문제 |
| 삭제 이상(Deletion Anomaly) | 하나의 데이터 삭제로 인해 원치 않는 데이터까지 사라지는 문제 |
| 갱신 이상(Update Anomaly) | 하나를 수정할 때 여러 곳을 수정해야 하는 문제 |
- 이러한 문제들을 예방하는 것이 정규화의 핵심입니다.
요약표
| 정규형 | 조건 | 목적 |
| 1NF | 원자값만 가짐 | 한 셀에 하나의 값만 |
| 2NF | 부분 함수 종속 제거 | 기본키 전체에 종속 |
| 3NF | 이행 함수 종속 제거 | 기본키 이외 종속 제거 |
| BCNF | 모든 결정자가 후보키 | 더 엄격한 3NF |
| 4NF | 다치 종속 제거 | 하나의 주제만 관리 |
| 5NF | 조인 종속 제거 | 무손실 복원 가능 |
'개발 공부' 카테고리의 다른 글
| 객체지향 프로그래밍(OOP) (0) | 2025.05.03 |
|---|---|
| 콜백 지옥 (Callback Hell) (0) | 2025.04.29 |
| 웹소켓(WebSocket) (1) | 2025.04.04 |
| REST API (0) | 2025.03.27 |
| Zod 검증 (0) | 2025.03.12 |