[데이터베이스 목차]

 

 

1. 정규화(Normalization) 개요

1) 정규화 정의

  • 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스
  • 데이터의 중복성을 최소화, 이상현상(Anomaly) 방지, 정보의 일관성을 보장하기 위해 함수 종속성을 이용하여 속성(attribute)들 간의 종속성을 분석해서 하나의 릴레이션(relation)에는 하나의 종속성(dependency)을 갖도록 분해하는 과정
  • 데이터의 중복과 종속으로 인한 이상 현상을 방지하기 위해속성들 간의 종속 관계를 분석하여 무결성을 유지하면서 다수의 릴레이션으로 분리하는 과정


2) 정규화의 목적

구분 설명
데이터 무결성 측면 데이터의 중복성을 제거하여 입력, 수정, 삭제의 이상현상(anomaly)를 제거하여 일관성(consistency)이 확보된 데이터를 처리할 수 있도록 함
데이터 성능 측면 중복된 데이터를 제거함으로써 입력, 수정, 삭제의 성능을 향상시킴
테이블이 여러 개로 분할되면서 JOIN으로 인한 데이터 조회시 성능저하 발생

 

2. 이상현상 및 정규화 원칙

1) 이상현상(Anormaly)

이상현상 설명
삽입 이상 (Insertion Anomaly) 데이터 삽입 시 의도와 다른 값들도 삽입됨
삭제 이상 (Delete Anomaly) 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제됨
갱신 이상 (Update Anomaly) 속성값 갱신 시 일부 튜플만 갱신되어 모순 발생

2) 정규화 원칙

원칙 설명
정보의 무손실 분해된 릴레이션이 표현하는 정보는 분해되기 전의 정보를 모두 포함하고 있어야 하며, 보다 바람직한 구조여야 함
데이터 중복성 감소 중복으로 인한 이상현상(Anomaly)의 제거
분리의 원칙 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리하여 표현하는 것

 

3. 정규화 절차

1) 정규화 단계별 절차

2) 정규화 단계별 미션

단계 미션 설명
1차 정규화 원자성 확보 - 각 속성에 값이 반복이 없는 원자값으로만 구성되도록 분해하는 과정
- 복수의 속성값을 갖는 속성을 분리
2차 정규화 부분함수 종속성 제거 - 주식별자가 아닌 속성들 중에서 주식별자 전체가 아닌 일부 속성에 종속된 속성을 찾아 제거하는 과정
- 주식별자에 종속적이지 않은 속성을 분리
3차 정규화 이행함수 종속성 제거 - 기본키 외의 속성들 간에 함수적 종속성을 가지지 않도록 이행함수 종속성을 제거해 가는 과정
- 속성에 종속적인 속성을 분리
BCNF 결정자 함수 종속성 제거 - 복잡한 식별자 관계에 의한 문제를 해결하기 위해, 후보키가 아닌 결정자를 제거하는 과정
- 다수의 주식별자 분리
4차 정규화 다치 종속성 제거 - 하나의 릴레이션에 두 개 이상의 다치 종속이 발생하는 경우 이를 제거하는 과정
- 다치 종속 속성의 분리
5차 정규화 조인 종속성 제거 - 조인 종속(JD)이 존재하지 않거나 JD에 의해 분해되는 Projection들이 원래 릴레이션의 후보키를 유지하는 과정
- 결합 종속일 경우 두 개 이상의 N개로 분리

 

4. 반정규화(Denormalization)

1) 반정규화 정의 및 유형

  • 정규화로 분해된 데이터 모델을 관련 있는 릴레이션으로 통합하여 DB 성능을 향상시키는 기법
  • 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 DB 튜닝(Tuning) 과정

 

반정규화 유형

구분 기법 설명
테이블 반정규화 테이블 병합 1:1 관계, 1:M관계, 슈퍼/서브타입 테이블 병합
테이블 분할 수직분할, 수평분할
테이블 추가 중복 테이블, 통계 테이블, 이력 테이블, 부분 테이블 추가
칼럼 반정규화 중복 컬럼 추가 조인을 감소시키기 위해 중복된 칼럼을 위치
파생 컬럼 추가 성능 저하를 예방하기 위해 미리 값을 계산하여 컬럼 보관
이력 테이블 컬럼 추가 최근 값 여부, 시작과 종료일 등을 성능 저하 예방을 위해 추가함
관계 반정규화 중복 관계 추가 성능저하를 예방하기 위해 추가적인 관계를 맺는 방법

2) 반정규화 절차

절차 방법 설명
1. 반정규화 대상조사 범위처리 빈도수 조사 자주 사용되는 테이블에 접근하는 프로세스 수가 많고항상 일정한 범위 만을 조회하는 경우
대량의 범위처리 조사 테이블에 대량의 데이터가 있고 대량의 데이터 범위를 자주 처리하는 경우에 처리 범위를 일정하게 줄이지 않으면 성능 보장할  없을 경우
통계성 프로세스 조사 통계성 프로세스에 의해 통계 정보를 필요로   별도의 통계테이블(반정규화 테이블) 생성
테이블 조인 개수 조사 테이블에 지나치게 많은 조인(JOIN) 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 반정규화를 검토
2. 다른 방법유도 검토 뷰 테이블 지나치게 많은 조인(JOIN)이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 (VIEW) 사용
클러스터링 적용 대량의 데이터를 특정 클러스터링 팩트에 의해 저장방식을 다르게 하는 방법 (조회중심의 테이블에만 적용가능)
인덱스 적용 인덱스를 통해 성능을 충분히 확보할  있다면 인덱스를 조정
응용 애플리케이션 응용 애플리케이션에서 로직을 구사하는 방법 변경
3. 반정규화 적용 테이블 반정규화 테이블 병합/분할/추가
컬럼 반정규화 중복 컬럼 추가파생 컬 추가
관계 반정규화 중복 관계 추가
4. 검증 데이터 무결성 검증 Application  반정규화 모델 반영 여부 / 조회결과 검증

 

5. 정규화 반정규화 비교

비교항목 정규화 반정규화
목적 - 데이터 중복 최소화 설계 - 데이터 조회시간 최적화 설계
조회비용 - 테이블간 JOIN 수가 증가 될수록 조회 비용이 증가 - 조회할 테이블 개수가 적어 조회 비용이 정규화 대비 감소
저장비용 - 단일 테이블 저장으로 저장 비용감소 - 다수 테이블 저장으로 저장 비용 증가
무결성 - 데이터 구조 안정성 및 무결성 유지 - 중복저장으로 무결성 검증이 필요
특징 - 데이터 중복 저장 최소화로 용량 우위 - JOIN 연산 비용감소로 시간 우위

 

+ Recent posts