정규화와 반정규화

prana·2022년 12월 5일
0

database

목록 보기
22/38

도서 : 아는 만큼 보이는 데이터베이스 설계와 구축- 이춘식 지음

정규화의 기본 원칙

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

정규화

  1. 1차 정규화
  • 복수의 속성값을 갖는 속성을 분리함
  1. 2차 정규화
  • 주식별자에 종속적이지 않은 속성을 분리함
  • 부분 종속 속성(PARTIAL DEPENDENCY ATTRIBUTE)을 분리함
  1. 3차 정규화
  • 속성에 종속적인 속성을 분리함
  • 이전 종속 속성(TRANSITIVE DEPENDENCY)을 분리함
  1. 보이스-코드 정규화(BCNF)
  • 다수의 주식별자를 분리함
  1. 4차 정규화
  • 다가 종속(Multi-Valued Depedndecy) 속성 분리
  1. 5차 정규화
  • 결합 종속(Join Dependency) 일 경우 두 개 이상의 N개로 분리함

함수적 종속성에 근거한 정규화 개념

1. 함수적 종속성

1) 함수적 종속성(Functional Dependency)

  • 릴레이션의 한 속성 X가 다른 속성 Y를 결정지을 때 Y는 X에게 함수적으로 종속됨, X->Y
  • X는 결정자(Determinant), Y는 종속(Dependent)

2) 부분함수적 종속성(2NF)

  • X->Y에서도 Y가 X의 부분 집합에 대해서도 함수적으로 종속되는 경우

3) 이행함수적 종속성(3NF)

  • 릴레이션 R에서, 속성 A-> X이고 X-> Y이면 A-> Y임

4) 결정자 함수적 종속성 (BCNF)

  • 함수적 종속이 되는 결정자가 후보키가 아닌 경우
  • 즉, X-> Y에서 X가 후보키가 아님

2. 다중값 종속성

(MVD : Mutivalued Dependency, 4NF)

  • 한 관계에 둘 이상의 독립적 다중값 속성이 존재하는 경우
  • X, Y, Z 세 개의 속성을 가진 릴레이션 R에서, 속성 쌍 (X, Z) 값에 대응하는 Y 값의 집합이 X값에만 종속되고, Z 값에는 독립이면 Y는 X에 다중값 종속된다고 하고 X->Y로 표기함

3. 조인 종속성 (JD: Join Dependency, 5NF)

  • 둘로 나눌 때에는 원래의 관계로 회복할 수 없으나, 셋 또는 그 이상으로 분리시킬 때에는 원래의 관계를 복원할 수 있는 특수한 경우임

반정규화의 기법들

1. 테이블 병합

1) 1:1 관계 테이블 병합

  • 1:1 관계를 통합하여 성능 향상

2) 1:M 관계 테이블 병합

  • 1:M 관계 통합하여 성능 향상

3) 슈퍼/서브타입 테이블 병합

  • 슈퍼/서브 관계 통합하여 성능 향상

2. 테이블 분할

1) 수직 분할

  • 컬럼 단위의 테이블을 디스크 I/O를 분산 처리하기 위해 테이블 1:1로 분리하여 성능 향상
    (트랜잭션이 처리되는 유형 파악이 선행되어야 함)

2) 수평 분할

  • 로우 단위로 집중 발생하는 트랜잭션을 분석하여 디스크 I/O 및 데이터 접근의 효율성을 높여 성능을 향상시키기 위해 로우 단위로 테이블을 쪼갬(관계가 없음)

3. 테이블 추가

1) 중복 테이블 추가

  • 다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 원격 조인을 제거하여 성능 향상

2) 통계 테이블 추가

  • SUM, AVG 등을 미리 수행하여 계산해 둠으로써 조회 성능 향상

3) 이력 테이블 추가

  • 이력 테이블 중에서 마스터 테이블에 존재하는 레코드를 중복하여 이력 테이블에 존재하는 방법은 반정규화의 유형

4) 부분 테이블 추가

  • 하나의 테이블의 전체 컬럼 중 자주 이용하는데 자주 이용하는 집중화된 컬럼들이 있을 때 디스크 I/O를 줄이기 위해 해당 컬럼들을 모아놓은 별도의 반정규화된 테이블을 형성

컬럼 반정규화 방법

1. 중복 컬럼 추가

  • 조인에 의해 처리할 때 성능 저하를 예방하기 위해
  • 즉, 조인을 감소시키기 위해 중복된 컬럼을 위치시킴

2. 파생 컬럼

  • 트랜잭션이 처리되는 시점에 계산에 의해 발생되는 성능 저하를 예방하기 위해 미리 값을 계산하여 컬럼에 보관함.
  • Derived Column 이라고 함.

3. 이력 테이블 컬럼 추가

  • 대량의 이력 데이터를 처리할 때 불특정 날 조회나 최근 값을 조회할 때 나타날 수 있는 성능 저하를 예방하기 위해
  • 이력 테이블에 기능성 컬럼(최근 값 여부, 시작과 종료일자 등) 을 추가한다.

4. PK에 의한 컬럼 추가

  • 복합 의미를 갖는 PK를 단일 속성으로 구성하였을 경우 발생이 됨. 단일 PK 안에서 특정 값을 별도로 조회하는 경우 성능 저하가 발생될 수 있음.

  • 이때 이미 PK 안에 데이터가 존재하지만 성능 향상을 위해 일반 속성으로 포함하는 방법

5. 응용 시스템 오작동을 위한 컬럼 추가

  • 업무적으로는 의미가 없지만 사용자가 데이터처리를 하다가 잘못 처리하여 원래 값으로 복구하기를 원하는 경우 이전 데이터를 임시적으로 중복하여 보관하는 기법

  • 컬럼으로 이것을 보관하는 방법은 오작동 처리를 위한 임시적인 기법이지만, 이것을 이력 데이터 모델로 풀어내면 정상적인 데이터 모델의 기법이 될 수 있다.


관계 반정규화

1. 중복 관계 추가

  • 데이터를 처리하기 위한 여러 경로를 거쳐 조인이 가능하지만, 이때 발생할 수 있는 성능 저하를 예방하기 위해 추가적인 관계를 맺는 방법

0개의 댓글

관련 채용 정보