본문 바로가기
CS/데이터베이스

SNS 모델링으로 배우는 정규화 / 비정규화 - 07. 실무에서의 정규화 비정규화에 대한 고민들

by 컴쏘 2023. 6. 4.

실무에서는 어떤 고민들을 할까?

테이블을 만들 때면 항상 고민

중복된 데이터이면 반드시 정규화를 해야할까?

  • 사실 그렇지 않음
  • 실무에서 중복 데이터면 기계적으로 정규화를 하는 분이 종종 있음
  • 정규화는 비용 → 읽기 비용을 지불하고 쓰기 비용을 줄이는 것

정규화시 고려해야 하는 것

  • 얼마나 빠르게 데이터의 최신성을 보장해야 하는가?
  • 히스토리성 데이터(데이터의 최신성을 보장하지 않음 → 과거의 데이터를 가지고 있어야함)는 오히려 정규화를 하지 않아야 한다.
  • 데이터 변경 주기와 조회 주기는 어떻게 되는가? → 만약 변경주기가 조회주기보다 빈번하다면 정규화하기에 유리하다. (쓰기의 이점을 가져가야 함. 반대의 경우에는 조회의 이점을 가져야함 )
  • 객체(테이블) 탐색 깊이가 얼마나 깊은가?

객체(테이블) 탐색 깊이가 얼마나 깊은가?

A에서 D 테이블을 찾아가기 위해서는 복잡한 과정을 거쳐야함

A 테이블이 바라보고 있는 B 테이블에 D참조를 가지도록 함 → 전과 같이 A에서 D까지 가지 않아도 된다.

다만 문제가 있다면 C의 D 참조가 변경될 경우 B의 D 참조도 같이 변경되어야 함

정규화를 하기로 하였다면 읽기시 데이터를 어떻게 가져올 것인가?

  • 테이블 조인을 많이 활용하는데, 이건 사실 고민해볼 문제
  • 테이블 조인은 서로 다른 테이블의 결합도를 엄청나게 높임 → 하나의 테이블이 변경이 되면 여러 테이블이 영향을 받음
  • 조회시에는 성능이 좋은 별도 데이터베이스나 캐싱 등 다양한 최적화 기법을 이용할 수 있음
  • 조인을 사용하게 되면, 이런 기법들을 사용하는데 제한이 있거나 더 많은 리소스가 들 수 있음
  • 읽기 쿼리 한번 더 발생되는 것은 그렇게 큰 부담이 아닐 수 있음

2023 KAKAO Tech Campus_BackEnd 필수 과정
DB(MySQL) 강의 정리 내용입니다.