Data architecture/Model

[Model] 데이터베이스 정규화(Normalization)

미녁쓰 Tech 2023. 4. 12. 21:13

1. 정규화(Normalization)란?

 - 데이터베이스 설계 시 데이터 중복을 최소화하기 위해 데이터를 구조화하는 과정

 - 데이터 일관성, 최소 중복, 유연성을 위해 데이터를 분해하는 과정

 - 함수적 종속성 개념에 기반하여 부정확한 종속성을 없애는 과정

 - 데이터의 일관성과 무결성을 유지하기 위한 방법

 

 

2. 정규화가 필요한 이유

 - 데이터 중복은 불필요한 공간 차지에 따른 비용이 발생

 - 데이터 중복은 이상(Anomaly)을 발생시킴

  → 이상의 종류에는 삽입이상, 삭제이상, 갱신이상이 존재

  → 정규화의 기본 목적은 중복된 데이터를 허용하지 않음에 있어, 위와 같은 문제 해결에 도움

 - 정규화된 데이터 모델일수록 유연성이 증가하고, 이는 DB 구조변경 대응에 수월

  → 엔트로피 증가 법칙에 따라 시스템은 시간에 비례해 복잡도가 증가함. 즉, 재구축 등 Cost를 줄이려면 유연성 확보 必

 

 

3. 정규화 종류

 - 제 1정규화 : 릴레이션 내 값에 대해 원자성을 보장하는 것

순번 이름 성별 전화번호
1 홍길동 010-1234-5678, 010-6666-7777
2 기은센 010-9876-5432
3 정민혁 010-0000-1111, 010-2222-3333, 010-4444,5555

위 릴레이션은 전화번호 속성에 1개의 전화번호가 아닌, n개의 전화번호가 포함되어 있어 제 1정규형을 만족하지 못한다.

이를 제 1정규화 과정(전화번호 속성값 분리)을 통해 아래와 같이 제 1정규형을 만족시킬 수 있다.

순번 이름 성별 전화번호
1 홍길동 010-1234-5678
2 홍길동 010-6666-7777
3 기은센 010-9876-5432
4 정민혁 010-0000-1111
5 정민혁 010-2222-3333
6 정민혁 010-4444-5555

 

 - 제 2정규화 : 1정규형을 만족하면서, 부분 함수 종속을 제거하는 것

사원별제품판매실적
사원번호 판매순번 판매제품코드 판매수량 사원명
42346 1 2020 10 정민혁
42346 2 3030 20 정민혁
12345 1 8080 20 홍길동
12345 2 5555 50 홍길동
12345 3 1212 100 홍길동

위는 사원별판매실적 릴레이션이고, 사원번호, 판매관리번호, 판매제품코드 라는 기본키(Primary Key)를 가진다.

제 2정규형의 경우 기본키에 속하지 않은 모든 속성은 기본키에 완전 함수 종속인 정규형을 의미한다. 

하지만 위 릴레이션 내 사원명 속성의 경우 사원번호에만 종속적이기에 제 2정규형을 만족하지 못한다.

이를 제 2정규화 과정(릴레이션 분리)을 통해 아래와 같이 제 2정규형을 만족시킬 수 있다.

사원별제품판매실적
사원번호 판매순번 판매제품코드 판매수량
42346 1 2020 10
42346 2 3030 20
12345 1 8080 20
12345 2 5555 50
12345 3 1212 100
사원정보
사원번호 사원명
42346 정민혁
42346 정민혁
12345 홍길동
12345 홍길동
12345 홍길동

 

 - 제 3정규화 : 2정규형을 만족하면서, 이행 함수 종속을 제거하는 것

교과목평점
학번 교과목코드 학점코드 학점평점
20201234 1001 A 4
20201234 1002 B 3
20210534 1005 A 4
20210534 1006 C 2

위는 교과목평점 릴레이션이고, 학번, 교과목코드 라는 기본키(Primary Key)를 가진다.

제 3정규형의 경우 제 2정규형에 속하면서, 기본키가 아닌 모든 속성이 이행적 함수 종속이 없어야 한다. 

하지만 위 릴레이션의 경우 학점코드라는 일반 속성은 학번, 교과목코드에 종속되고,

학점평점이라는 일반 속성은 학점코드에 종속되기 때문에 이행적 함수 종속이 발생한 케이스이다.

이를 제 3정규화 과정(릴레이션 분리)을 통해 아래와 같이 제 3정규형을 만족시킬 수 있다.

학번 교과목코드 학점코드
20201234 1001 A
20201234 1002 B
20210534 1005 A
20210534 1006 C
학점코드 학점평점
A 4
B 3
A 4
C 2

 

 - BCNF, 제 4정규화, 제 5정규화도 존재하나, 더 복잡하고 추상적인 개념이기에 별도 설명 X

 * 경험상 실무에선 기본적인 1NF, 2NF, 3NF도 이루어지지 않는 경우 多(기본이라도 지키자 mind)

 

 

4. 정규화의 문제점

 - 여러 테이블간 조인(JOIN)이 유발되어 데이터 조회(SELECT) 시 성능 저하

  → 이러한 문제점을 해결할 수 있는 방법의 한 가지가 반정규화(역정규화)

 

 

5. 반정규화(De-Normalization)란?

 - 조회(SELECT) 성능 향상을 위해 데이터의 중복을 허용하는 방법

  → 반정규화 시 데이터의 일관성 및 모델의 유연성을 저해할 수 있

 

 

6. 반정규화가 필요한 경우

 - OLAP 시스템과 같이 복잡하고 대규모 데이터 처리를 위해 성능 개선이 필요한 경우

 - 지나치게 조인(JOIN)이 발생하거나, 항상 특정 범위만을 조회(SELECT)하는 경우 등

 

 

7. 반정규화 종류

 - 테이블 반정규화 : 테이블 병합, 테이블 분할, 테이블 추가

 - 컬럼 반정규화 : 중복컬럼 추가, 파생컬럼 추가 등

 - 관계 반정규화 : 중복관계 추가

 

 

※ 핵심요약

1. 정규화는 모델 유연성, 데이터 무결성을 유지하기 위해 함수적 종속성 개념에 기반하여 데이터 중복을 최소화 하는 과정

2. 기본적으로 정규화된 데이터 모델을 지향해야함. 하지만 정규화된 모델은 물리적인 성능문제를 발생시킬 수 있음

3. 조회 성능 문제를 해결하기 위한 기법 중 반정규화가 있으나, 중복을 발생시키는 개념이므로 충분한 검토가 필요

4. 반정규화를 검토하기 전 무조건적인 선행조건은 정규화임. 즉, 정규화 없이 반정규화는 없음.