데이터 베이스 정규화
- 데이터베이스 정규화의 주요 목적 중 하나는 데이터 중복을 방지하는 것입니다. 이를 통해 데이터 무결성을 유지하고 저장 공간을 절약하며, 데이터 갱신 시 일관성을 보장할 수 있습니다.
- 종속적인 칼럼은 테이블을 분리해서 중복을 방지한다

제1정규형 (1NF), 원자값으로 만들기
- 1. 각 컬럼이 원자값(더 이상 분해할 수 없는 단일 값)을 가져야 합니다
- 2 반복되는 그룹을 제거해야 합니다.
- 3. 각 레코드가 유일한 식별자(기본 키)를 가져야 합니다.
1. 각 컬럼이 원자값(Atomic Value)을 가져야 합니다
- 비정규화된 테이블:학생ID이름연락처
학생ID 이름 연락처 1 홍길동 010-1234-5678, 02-123-4567 - 1NF를 만족하는 테이블:학생ID이름휴대전화집전화
1 홍길동 010-1234-5678 02-123-4567
2. 반복되는 그룹을 제거해야 합니다
- 비정규화된 테이블:
주문ID 고객명 상품1 수량1 상품2 수량2 1 김철수 사과 2 배 3 - 1NF를 만족하는 테이블:
주문ID 고객명 상품 수량 1 김철수 사과 2 1 김철수 배 3
3. 각 레코드가 유일한 식별자(기본 키)를 가져야 합니다
- 비정규화된 테이블 :
이름 과목 점수 이영희 수학 90 이영희 영어 85 - 1NF를 만족하는 테이블
학생ID 이름 과목 점수 1 이영희 수학 90 1 이영희 영어 85
제2정규형 (2NF), 부분함수종속제거
- 테이블의 모든 비프라이머리 속성(Primary Key가 아닌 속성)이 완전 함수 종속을 가져야 함. 즉, 복합키를 사용하는 경우, 비프라이머리 속성이 모든 프라이머리 키에 종속되어야 함. 다시말하면 부분 함수 종속이 없어야 합니다. 즉, 복합 키(기본 키가 두 개 이상의 컬럼으로 구성된 경우)의 일부에만 종속되는 컬럼을 분리합니다.
- 함수 종속이란? 하나의 속성(또는 속성들의 집합)의 값이 다른 속성(또는 속성들의 집합)의 값에 의해 유일하게 결정될 때, 함수 종속이 성립한다고 합니다. 마치 "학번"이 결정되면 "이름"이 유일하게 결정되는 것처럼 말이죠.
- 완전 함수 종속이란? 복합 키(여러 개의 속성으로 구성된 키)를 사용하는 경우, 비프라이머리 속성이 복합 키의 모든 부분에 의해서만 함수 종속될 때를 말합니다. 즉, 복합 키의 일부만으로는 비프라이머리 속성의 값을 유일하게 결정할 수 없어야 합니다.
예시 (2NF에 위배된 테이블): PK는 학생ID, 과목ID 복합키인데, 교수명과 과목명이 과목ID에 부분종속됨.
| 학생ID | 과목ID | 교수명 | 과목명 |
|--------|--------|--------|--------|
| 1 | 101 | 김철수 | 수학 |
| 1 | 102 | 이영희 | 과학 |
| 2 | 101 | 김철수 | 수학 |
수정된 테이블(O)
| 학생ID | 과목ID |
|--------|--------|
| 1 | 101 |
| 1 | 102 |
| 2 | 101 |
수정된 테이블(O)
| 과목ID | 교수명 | 과목명 |
|--------|--------|--------|
| 101 | 김철수 | 수학 |
| 102 | 이영희 | 과학 |
제3정규형 (3NF), 이행함수종속제거
- 기본 키가 아닌 컬럼이 또 다른 기본 키가 아닌 컬럼에 종속될 때 이를 분리합니다. 즉, 한 레코드에 한 칼럼이 다른 칼럼에 데이터 종속성이 있는 경우 이를 분리하여 테이블을 나누는 것이 정규화의 핵심입니다
- 이행 함수 종속(Transitive Dependency) : X → Y, Y → Z라는 두 개의 함수 종속이 존재할 때, X → Z라는 새로운 함수 종속이 성립하는 것을 의미합니다. 즉, X가 Y를 결정하고, Y가 Z를 결정하면, 결국 X가 Z를 결정하게 되는 관계를 말합니다.
3NF를 위반하는 예시 ; PK는 주문번호이고 비PK인 고객이름에 이행종속적인 고객주소 데이터가 있음.
| 주문번호 | 고객 이름 | 고객 주소 | 상품 이름 | 상품 가격 |
| 1001 | 홍길동 | 서울시 강남구 | 노트북 | 100만원 |
| 1002 | 이순신 | 부산시 해운대구 | 스마트폰 | 80만원 |
| 1003 | 홍길동 | 서울시 강남구 | 태블릿 | 70만원 |
3NF를 만족하도록 분리
| 주문번호 | 고객 ID | 상품 이름 | 상품 가격 |
| 1001 | 101 | 노트북 | 100만원 |
| 1002 | 102 | 스마트폰 | 80만원 |
| 1003 | 101 | 태블릿 | 70만원 |
'개발기술 > RDB' 카테고리의 다른 글
| DB 데이터 탐색방식 (0) | 2026.01.13 |
|---|---|
| 데이터모델링 방법론 : DDD(도메인 주도 설계) (1) | 2025.12.29 |
| DB 마이그레이션 (1) | 2025.11.15 |
| 데이터베이스 저장구조 (0) | 2025.08.18 |
| 데이터베이스 쿼리 동작분석 및 튜닝 (2) | 2025.07.14 |