데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정이다. 일반적으로 테이블을 여러개로 분해하면 속도는 상대적으로 느려질 수 있지만, 분해하지 않으면 이상 문제들이 발생한다.
👉 삽입 이상
데이터를 저장할 때 원하지 않는 정보가 함께 삽입되거나 자료가 부족해 삽입이 되지 않아 발생하는 문제점
👉 삭제 이상
하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨으로 원하지 않는 정보 손실이 발생하는 문제점
👉 갱신/수정 이상
정확하지 않거나 일부의 튜플만 갱신되어 정보가 모호해지거나 일관성이 없어져 정확한 정보 파악이 되지 않는 문제점
👉 정규화
온라인 거래 시스템 같은 OLTP(Online Transaction Processing) 데이터베이스는 CRUD(Create, Read, Update, Delete)가 많이 일어나 정규화가 적절하다.
👉 반정규화
분석 리포트 같은 OLAP(Online Analytical Processing) 데이터베이스는 분석과 리포팅을 위해 사용되기 때문에 연산의 속도를 위해 반정규화가 적절하다.
여기서 반정규화란, 시스템의 성능 향성, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로, 의도적으로 정규화 원칙을 위배하는 행위이다. 보통 데이터 중복을 허용하고, 조인을 줄인다. 또한, 조회(select) 속도를 향상시키지만, 데이터 모델의 유연성은 낮아진다.
아래와 같은 상황에서 반정규화를 수행한다.
👉 제 1정규화: 1NF
👉 제 2정규화: 2NF
👉 제 3정규화: 3NF
👉 BCNF
👉 제 4정규화: 4NF
👉 제 5정규화: 5NF