[DATABASE] 반정규화(Denormalization)

seheo·2022년 7월 25일
0

Database

목록 보기
2/3

정규화란

  • 데이터베이스에서 이상 현상을 없앨 수 있다 (3NF 테이블의 대부분이 이러한 이상현상을 방지)
  • 데이터의 중복을 없애고 불필요한 데이터를 최소화 한다
  • 새로운 종류의 데이터를 추가할 때 테이블 구조를 수정을 많이 하지 않아도 된다.
  • 위 조건에 부합하기 위해 데이터를 분해하는 과정
  • 입력, 수정, 삭제 성능 향상
  • 조회 성능 향상될 수도 저하될 수도 있다.

정규화의 문제점

  • 정규화는 입력, 수정, 삭제 성능을 향상 시키지만 데이터 조회(select)시에 조인(join)을 유발하여 성능 저하가 발생 할 수도 있다.

  • 공급자와 전화번호, 메일주소, 위치는 1:M 관계이므로 한 명의 공급자당 여러 개의 전화번호, 메일주소, 위치가 존재한다. 따라서 가장 최근에 변경된 값을 가져오기 위해서는 조금 복잡한 조인이 발생
  • SELECT A.공급자명, B.전화번호, C.메일주소, D.위치
    FROM 공급자 A,
    (SELECT X.공급자번호, X.전화번호 FROM 전화번호 X, (SELECT 공급자번호, MAX(순번) 순번 FROM 전화번호 WHERE 공급자번호 BETWEEN '1001' AND '1005' GROUP BY 공급자번호) Y
    WHERE X.공급자번호 = Y.공급자번호 AND X.순번 = Y.순번) B, (SELECT X.공급자번호, X.메일주소 FROM 메일주소 X, (SELECT 공급자번호, MAX(순번) 순번 FROM 메일주소 WHERE 공급자번호 BETWEEN '1001' AND '1005' GROUP BY 공급자번호) Y
    WHERE X.공급자번호 = Y.공급자번호 AND X.순번 = Y.순번) C, (SELECT X.공급자번호, X.위치 FROM 위치 X,
    (SELECT 공급자번호, MAX(순번) 순번 FROM 위치 WHERE 공급자번호 BETWEEN '1001' AND '1005' GROUP BY 공급자번호) Y WHERE X.공급자번호 = Y.공급자번호 AND X.순번 = Y.순번) D
    WHERE A.공급자번호 = B.공급자번호 AND
    A.공급자번호 = C.공급자번호 AND A.공급자번호 = D.공급자번호 AND A.공급자번호 BETWEEN '1001' AND '1005'
  • 매우 복잡한 SQL구문

해결방안

반정규화를 통해 해결 가능하다.

  • 모든 반정규화가 조회 성능을 향상 시켜주는 것은 아님
  • 규화를 해서 성능이 저하되기는커녕 정규화를 해야만 성능이 향상되는 경우가 아주 많이 나타나기 때문

반정규화란(De-Normalization)

정규화된 Entity, Attribute, Relation에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등ㅇ을 수수행하는 모델링 기법

  • 반정규화는 데이터를 중복하여 성능을 향상시키기 위한 기법이라고 정의
  • 좀 더 넓은 의미의 반정규화는 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정
  • 데이터 무결성이 깨질 수 있는 위험을 무릅쓰고 데이터를 중복하여 반정규화를 적용하는 이유
  • 데이터를 조회할 때 디스크 I/O량이 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되는 경우 반정규화를 수행

정규화 문제 해결 예시

  • SQL문장이 반정규화를 적용하므로 인해 다음과 같이 간단하게 작성이 되어 가독성도 높아지고 성능도 향상
  • SELECT 공급자명, 전화번호, 메일주소, 위치 FROM 공급자 WHERE 공급자번호 BETWEEN '1001' AND '1005'

테이블 반정규화(Table De-Normalization)

속성 반정규화(Attribute De-Normalization)

관계 반정규화(Relation De-Normalization)

참고자료

정규화와 성능 - DATA ON-AIR
[데이터베이스] 정규화(Normalization)와 역정규화(DeNormalization)

0개의 댓글