[DB} 7. 정규화, 반정규화

2024. 2. 17. 19:59cs및 소프트스킬/데이터베이스

728x90
반응형
SMALL

1. 정규화(Normaliztion)

- 테이블의 속성들이 상호 종속적인 관계를 갖는 특성을 이용하여 테이블을 무손실 분해하는 과정

 

 

2. 정규화 목적

- 최대한 중복을 제거하여 삽입, 속성, 갱신 이상의 발생 가능성 줄이는 것

 

 

3. 정규화 종류

- 제 1정규화(1NF) / 제 2정규화(2NF) / 제 3정규화(3NF) / BCNF / 제 4정규화(4NF) / 제 5정규화

 

 

4. 제 1정규화(1NF)

- 해당 테이블에 속한 모든 소성의 도메인(Domain)이 원자 값(Atomic Value)만으로 되어 있는 정규형

- 테이블의 모든 속성 값이 원자 값으로만 되어 있음

 

 

5. 제 2정규화(2NF)

- 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족하는 정규형

 

 

6. 제 3정규(3NF)

- 기본키가 아닌 모든 속성이 기본키에 대하여 이행적 함수적 종속을 만족하지 않는 정규형

- 이행적 함수적 종속 약어 : Transitive Functional Dependency

 

 

7. BCNF(Boyce-Codd Normal Form) 

- 해당 테이블에서 모든 결정자가 후보키(Candidate Key)인 정규형

- 보통 제 3정규형에 후보키가 여러개 존재하고, 이러한 후보키들이 서로 중첩되어 나타나는 경우 적용 가능

 

8. 제 4정규화(4NF)

- 해당 테이블에 다중 값 종속(MVD; Multi Valued Dependency)  A → B가 존재할 경우 해당 테이블의 모든 속성에 A에 함수적 종속 관계를 만족하는 정규화

- 다중 값 종속(다치 종속) : 테이블 A, B, C 3개의 속성을 갖춘경우, 복합속성(A,C)에 대응하는 B값의 집합이 A값에만 종속되고, C값에 무관 시 B는 A에 다중 값 종속, A → B로 표기

 

 

9. 제 5정규화(5NF) 

- 해당 테이블의 모든 조인 종속(JD; Join depencency)가 해당 테이블 후보키를 통해서만 성립되는 정규형

- 조인 종속 : 해당 테이블 속성 부분 집합(X, Y, Z) 있을 경우, 자신의 프로젝션(Projection) X, Y, Z 모두 조인한 결과와 동일 시 해당 테이블은 조인 종속(JD(X,Y,Z))를 만족시킴 

 

 

10. 정규화 과정 간단 정리 

- 비정규 릴레이션 

- 1NF : 도메인이 원자값 상태

- 2NF : 부분적 함수 종속 제거 상태

- 3NF : 이행적 함수 종속 제거 상태

- BCNF : 결정자이면서 후보키가 아닌 것 제거 상태

- 4NF : 다치 종속 제거 상태

- 5NF : 조인 종속성 이용 상태

 

 

11. 반정규화(Denormalization)

- 정규화된 데이터 모델을 의도적으로 통합/중복/분리하여 정규화 원칙을 위배하는 행위

    => 시스템의 성능을 향상 및 개발/운영의 편의성 등 높이기 위함

- 장점 : 1) 시스템 성능 향상, 2) 관리 효율성 증가

- 단점 : 1) 데이터의 일관성 및 정합성 저하, 2) 과도한 반정규화는 오히려 성능 저하

- 종류 : 1) 테이블 통합 / 2) 테이블 분할 / 3) 중복 테이블 추가 / 4) 중복 속성 추가

 

 

12. 중복 테이블 추가

- 반 정규화 기법 중 하나

- 작업의 효율성을 향상 시키기 위해 테이블 추가

- 방법

  1) 집계 테이블의 추가 : 집계 데이터를 위한 테이블을 생성하고, 각 원본 테이블에 트리거(Trigger)를 설정하여 사용하는 것

  2) 진행 테이블의 추가 : 이력 관리 등의 목적으로 추가하는 테이블

  3) 특정 부분만을 포함하는 테이블의 추가 : 데이터가 많은 테이블의 특정 부분만을 사용하는 경우 해당 부분만으로 새로운 테이블을 생성

 

 

13. 테이블 분할

- 반 정규화 기법 중 하나, 테이블을 수직 or 수평으로 분할 기법

- 수평분할(Horizontal Partitioning) : 레코드별로 사용 빈도의 차이가 클때, 사용 빈도에 따라 테이블을 분할

- 수직분할(Vertical Partitioning) : 하나의 테이블에 속성이 너무 많을 때, 속성을 기준으로 테이블 분할

 

 

14. 테이블 통합

- 두 개의 테이블이 조인되는 경우가 많아 하나의 테이블로 합쳐 사용하는 것이 성능 향상에 도움이 될 경우 수행

- 두 개의 테이블에서 발생하는 프로세스가 동일하게 자주 처리되는 경우, 두 개의 테이블을 이용해 항상 조회를 수행하는 경우 테이블 통합을 고려

 

 

 

 

 

728x90
반응형
LIST