정규화/비정규화 비교
데이터 중복
- 정규화: 중복이 제거된다. 한곳에만 진실을 두는 SSOT를 지향한다.
- 비정규화: 중복을 허용한다. 여러곳에 필요한 값들을 복사해 놓는다.
쓰기 일관성
- 정규화: 한 곳만 갱신한다. 테이블 ID로 참조하므로 다 연관으로서 전파된다. -> 일관성 관리가 쉬움.
- 비정규화: 복사본 전부를 갱신해야한다. -> 일관성 비용이 높다.
읽기 성능
- 정규화: 테이블들이 하나의 주제에 대한 사실만 두므로 쪼개져있다. 따라서 조인이 필요하므로 읽기 비용이 높다.
- 비정규화: 관련있는 데이터들을 하나의 문서에 모아두므로 지역성이 높다. 따라서 조인이 필요없고 한번에 읽으므로 읽기가 빠르다.
저장 공간
- 정규화: 중복이 제거되므로 저장공간이 절약된다.
- 비정규화: 데이터가 여러곳에 중복되어 저장되어있으므로 저장공간 사용이 증가한다.
대표 사용 환경
- 정규화: OLTP - 쓰기, 정합성 중심인 곳
- 비정규화: OLAP - 읽기 비중 매우 높은 곳, 문서 모델
정리
정규화는 쓰기 일관성을, 역정규화는 읽기 성능을 얻는다. 쓰기 일관성과 읽기 성능은 동시에 가질 수 없는 트레이드오프다.
역정규화를 택하면 "복사본 동기화"라는 책임이 생기는 것이다. 한 곳을 바꾸면 흩어진 사본을 전부 갱신해야 하고, 그 사이 불일치 구간이 생긴다. 따라서 역정규화는 읽기 대 쓰기 비율이 읽기 쪽이 크게 높고, 약간의 불일치를 허용할 수 있을 때 정당화된다.
반응형