정규화의 목적은 안정성과 확장성

  • 정규화를 하는 가장 근본적인 이유는 중복 데이터(속성,엔터티)를 제거하기 위함 \-> 아노말리 제거
  • 정규화가 중복을 완전히 제거하는 것은 불가능하지만 최소화할 수 있음
  • 데이터의 정체성이 그대로 반영된 모델 구조에서는 업무가 수정되거나 추가되어도 엔터티에 반영하기 수월해짐
  • 데이터 무결성을 높임
  • 저장 공간을 최소화할 수 있음 \-> 성능향상에 도움

정규화 테이블

모델1 : 고객 (고객번호, 고객명, 집전화번호, 핸드폰번호) 로 구성된 비정규화된 모델

모델2 : 고객 (고객번호, 고객명), 고객전화번호 (고객번호, 번호종류, 번호) 로 구성된 정규화 모델

이 경우 사업장전화번호를 추가하여야 할 경우 모델1의 경우, 컬럼을 추가하여야 함, 컬럼이 추가되면 테이블 사이즈는 증가함

반면 모델2의 경우 컬럼을 추가할 필요가 없음

(모델2의 경우 테이블 사이즈가 증가할 가능성은 적지만 조인 횟수가 증가하므로 테이블 사이즈 증가량과 조인횟수의 증가량이

성능에 어느정도 영향을 미칠지에 대한 검토가 필요함)

쿼리 작성 방법에 따라 모델1의 경우 쿼리 변경이 필수적이지만 모델2의 경우에는 쿼리 변경이 필요하지 않을 수도 있음

select a.고객번호
     , a.고객명
     , (select listagg(b.번호,',') within group(order by b.번호종류)
          from 고객전화번호 b
         where b.고객번호 = a.고객번호) 고객전화번호
  from 고객 a