실무에서는 어떤 고민들을 할까?
테이블을 만들 때면 항상 고민
중복된 데이터이면 반드시 정규화를 해야할까?
- 사실 그렇지 않음
- 실무에서 중복 데이터면 기계적으로 정규화를 하는 분이 종종 있음
- 정규화는 비용 → 읽기 비용을 지불하고 쓰기 비용을 줄이는 것
정규화시 고려해야 하는 것
- 얼마나 빠르게 데이터의 최신성을 보장해야 하는가?
- 히스토리성 데이터(데이터의 최신성을 보장하지 않음 → 과거의 데이터를 가지고 있어야함)는 오히려 정규화를 하지 않아야 한다.
- 데이터 변경 주기와 조회 주기는 어떻게 되는가? → 만약 변경주기가 조회주기보다 빈번하다면 정규화하기에 유리하다. (쓰기의 이점을 가져가야 함. 반대의 경우에는 조회의 이점을 가져야함 )
- 객체(테이블) 탐색 깊이가 얼마나 깊은가?
객체(테이블) 탐색 깊이가 얼마나 깊은가?
A에서 D 테이블을 찾아가기 위해서는 복잡한 과정을 거쳐야함
A 테이블이 바라보고 있는 B 테이블에 D참조를 가지도록 함 → 전과 같이 A에서 D까지 가지 않아도 된다.
다만 문제가 있다면 C의 D 참조가 변경될 경우 B의 D 참조도 같이 변경되어야 함
정규화를 하기로 하였다면 읽기시 데이터를 어떻게 가져올 것인가?
- 테이블 조인을 많이 활용하는데, 이건 사실 고민해볼 문제
- 테이블 조인은 서로 다른 테이블의 결합도를 엄청나게 높임 → 하나의 테이블이 변경이 되면 여러 테이블이 영향을 받음
- 조회시에는 성능이 좋은 별도 데이터베이스나 캐싱 등 다양한 최적화 기법을 이용할 수 있음
- 조인을 사용하게 되면, 이런 기법들을 사용하는데 제한이 있거나 더 많은 리소스가 들 수 있음
- 읽기 쿼리 한번 더 발생되는 것은 그렇게 큰 부담이 아닐 수 있음
2023 KAKAO Tech Campus_BackEnd 필수 과정
DB(MySQL) 강의 정리 내용입니다.
'CS > 데이터베이스' 카테고리의 다른 글
조회 최적화를 위한 인덱스 이해하기 - 02. 인덱스 기본동작 (0) | 2023.06.04 |
---|---|
조회 최적화를 위한 인덱스 이해하기 - 01. 데이터베이스 성능 핵심 (0) | 2023.06.04 |
SNS 모델링으로 배우는 정규화 / 비정규화 - 01. 정규화 - 비정규화 핵심 이론 (0) | 2023.06.04 |
MySQL 소개 - 02. MySQL 아키텍처 소개 (0) | 2023.06.04 |
MySQL 소개 - 01. MySQL을 학습하는 이유 (0) | 2023.06.04 |