13.1 비정규화란?

  • 비정규화는 데이터를 중복시키거나 그룹핑합으로써 데이터베이스의 성능의 향상시키기 위한 기법.
  • 비정규화를 수행하려면 정규화를 먼저 수행해야 함.
  • 비정규형을 사용하는 유일한 목적은 조회 성능을 향상시키기 위해서 임.
  • 비정규형은 어떤 식으로든 중복된 데이터를 관리해야 함(원 데이터와 정합성).
  • 정규화된 엔터티의 데이터는 서로 분해돼 있으므로 다른 블록(Block)에 저장됨. 느릴 수 있음.
  • 조회 요건에 따라 정규형이 빨를 수도 있어 무조건 비정규화를 수행하는 것은 옳지 않음.
  • 비정규형이 정규형보다 조회 성능이 빠르지 않을 수 있음.
  • 데이터의 중복을 허용한다는 의미에는 속성을 중복해서 사용한다는 의미와 엔터티를 중복해서 사용한다는 의미가 포함.


추출 속성

  • 추출 속성은 기존에 존재하는 속성을 가공해서 생성할 수 있는 속성임.
  • 추출 속성을 생성하는 원천 속성은 주로 하위(자식) 엔터티의 속성임.
  • 하위(자식) 엔터티의 많은 인스턴스를 읽어서 sum, count, max 등의 처리를 함.
  • 업무적으로 중요해져 이미 기초 속성처럼 변한 속성이 있음.(계좌 엔터티의 "잔고금액" 속성)
  • 계좌나 계약 엔터티와 같은 마스터 성격의 엔터티에는 추출 속성이 많이 존재함.


중복 석성

  • 중복 속성은 기존에 존재하는 속성을 복사해서 그대로 가져다 놓은 속성임.
  • 주로 상위(부모) 엔터티를 조인(Join)하기 싫어서 발생함. 크게 성능에 도움 안됨.


추출, 중복 속성 비교

  • 중복 속성이라면, 어떤 속성을 복사한 것이며 추출 속성이라면, 어떤 속성을 가공한 것인지를 알고 있어야함.
  • 추출 속성을 채택하는 것은 때에 따라 의미가 있으므로 검토의 여지가 있음. 중복 속성의 채택은 얻는 것에 비해 잃는 것이 큼.


비정규화를 수행하는 방법

  • 정규화의 역작업
  • 중복 속성 채택
  • 추출 속성 채택
  • 요약 엔터티 채택


비정규화 원칙

  • 최우선적으로 고려할 요소는 데이터 무결성
  • 정규형은 필수이며 필요(성능 문제 발생)시 비정규형을 채택
  • 중복 속성은 가능한 사용하지 않으며 추출 속성은 채택 가능