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 연산 비용감소로 시간 우위 |
'메가노트 > 토픽과제(정리)' 카테고리의 다른 글
옵티마이저(홍진택 주무관님) (0) | 2022.10.22 |
---|---|
데이터베이스 인덱스(이강욱 선임님) (0) | 2022.10.22 |
동시성 제어(안혜진 선임님) (0) | 2022.10.22 |
데이터 회복(배준호 대리님) (0) | 2022.10.22 |
CMMi(이상희 부장님) (0) | 2022.10.15 |