정보처리기사/2. 데이터 입출력 구현

반정규화(Denormalization)

뿌단이 2022. 9. 8. 17:46

1. 반정규화

  • 반정규화는 시스템의 성능을 향상하고 개발 및 운영의 편의성 등을 높이기 위해 정규화된 데이터 모델의도적으로 통합, 중복, 분리하여 정규화 원칙을 위배하는 행위이다.
  • 반정규화를 수행하면 시스템의 성능이 향상되고 관리 효율성은 증가하지만 데이터의 일관성 및 정합성이 저하될 수 있다.
  • 과도한 반정규화는 오히려 성능을 저하시킬 수 있다.

 

<반정규화의 방법>

  • 테이블 통합
  • 테이블 분할
  • 중복 테이블 추가
  • 중복 속성 추가

<여기서 Tip!>

한마디로 반정규화는 정규화를 일부러 안한다는 것이다.조금은 유동성 있게 만들자는 취지에서 하는 것이다.근데 그렇다고 너무 많이하면 오류발생 가능성이 높아진다.이제 반 정규화의 방법들을 설명하겠다.

 

2. 테이블 통합

 테이블 통합은 두 개의 테이블 조인되어 사용되는 경우가 많을 경우 성능향상을 위해 아예 하나의 테이블로 만들어 사용하는 것이다.

 

<테이블 통합을 고려하는 경우>

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

 

<테이블 통합의 종류>

  • 1:1 관계 테이블 통합
  • 1:N 관계 테이블 통합
  • 슈퍼타입 / 서브타입 테이블 통합

 

3. 테이블 분할

테이블 분할은 테이블을 수직 또는 수평으로 분할하는 것이다.

방법 내용
수평 분할 - 레코드(Record)를 기준으로 테이블을 분할하는 것
- 레코드 별로 사용 빈도의 차이가 큰 경우 사용 빈도에 따라 테이블을 분할함
수직 분할 - 하나의 테이블에 속성이 너무 많을 경우 속성을 기준으로 테이블을 분할하는 것
- 종류 : 갱신 위주의 속성 분할, 자주 조회되는 속성 분할, 크기가 큰 속성 분할, 보안을 적용해야 하는 속성 분할

 

 

4. 중복 테이블 추가

중복 테이블 추가는 작업의 효율성을 향상시키기 위해 테이블을 추가하는 것이다.

 

<중복 테이블을 추가하는 경우>

  • 여러 테이블에서 데이터를 추출해서 사용해야 할 경우
  • 다른 서버에 저장된 테이블을 이용해야 하는 경우

 

<중복 테이블 추가 방법>

방법 설명
집계 테이블의 추가 집계 데이터를 위한 테이블을 생성하고, 각 원본 테이블에 트리거를 설정하여 사용하는 것
진행 테이블의 추가 이력 관리 등의 목적으로 추가하는 테이블
특정 부분만을 포함하는 테이블의 추가 데이터가 많은 테이블 특정 부분만을 사용하는 경우 해당 부분만으로 새로운 테이블을 생성

트리거(Trigger) : DBS에서 데이터의 입력 갱신 삭제 등 이벤트가 발생할 때마다 자동으로 수행되는 절차형 SQL 이다.

 

 

5. 중복 속성 추가

  • 중복 속성 추가는 조인해서 데이터를 처리할 때 데이터를 조회하는 경로를 단축하기 위해 자주 사용하는 속성을 하나 더 추가하는 것이다.
  • 중복 속성을 추가하면 데이터의 무결성 확보가 어렵고, 디스크 공간이 추가로 필요하다.

 

<중복 속성을 추가하는 경우>

  • 조인이 자주 발생하는 속성인 경우
  • 접근 경로가 복잡한 속성인 경우
  • 액세스의 조건으로 자주 사용되는 속성인 경우
  • 기본키의 형태가 적절하지 않거나 여러 개의 속성으로 구성된 경우

 

<여기서 Tip!>

1. 테이블 통합 :  테이블이 Join되어 사용되는 경우가 많을 경우 1:1, 1:N 관계의 테이블들을 하나로 합친다.

 

2. 테이블 분할 : 레코드별로 사용빈도 차이가 크면 수평분할 테이블에 속성이 많을 경우 수직분할

 

3. 중복 테이블 추가 : 여러 테이블에서 데이터를 추출해서 사용할 경우 복잡하므로 같은값이 저장된 하나의 테이블을 만들어서 사용하는것.     1) 집계 테이블 추가 : 트리거를 설정

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

   3) 특정부분 포함 테이블 추가 : 많은 테이블의 특정 부분만 사용할 때

 

4. 중복 속성 추가 : 조인이 자주 발생하는 속성이거나 접근 경로가 복잡하거나 기본키의 형태가 적절하지 않을 경우 그 속성을 추가하는 것.

 

 

 

 

읽어주셔서 감사합니다!

정처기 화이팅!