정규화, 비정규화의 특징과 데이터 예시

데이터 정규화, 반(비) 정규화의 특징

정규화

  1. 중복을 제거하고 한 곳에서 관리
  2. 데이터 정합성 유지가 쉽다
  3. 읽기 시 참조 발생

반(비)정규화

  1. 중복을 허용
  2. 데이터 정합성 유지가 어려움
  3. 참조 없이 읽기 가능

정규화와 반(비)정규화에 대해 고민해 볼 만한 데이터 예시

** e-commerce 상품의 제조사 변경 **

  • 정규화를 해서는 안되는 대표적인 데이터는 “히스토리성 데이터” 이다.
    예를 들어, e-commerce 사이트에서 고객이 주문한 특정 상품의 제조사가 변경되었다고 가정해보자. 비즈니스 정책에 따라 달라지겠지만, 만약 과거의 제조사 명을 함께 제공해주어야 한다면 이는 정규화의 대상이 아니라고 할 수 있다.

** SNS 의 Follow 기능 **

  • SNS 의 “Follow” 기능을 예를 들어보자. Follow 기능을 기록하는 ‘Follow’ 테이블이 필요하다. 이 테이블에 Follow 의 주체와 객체가 되는 유저의 닉네임이 포함되어야 할까?
    Follow 테이블에 nickname 이 포함된 경우 읽는 작업을 할 때 별도의 쿼리나 Join 문이 필요하지 않기 때문에 읽기 성능 상의 이점을 볼 수 있겠지만, 만약 100만 팔로워 이상이 되는 인플루언서가
    닉네임을 변경하는 경우 이를 해당하는 모든 following tuples 들을 찾아서 갱신해주는 것은 꽤 부담스러운 작업이 될 수 있다.

comments powered by Disqus