개념
데이터베이스에서 정규화(Normalization) 는 테이블을 정리하여 중복 데이터를 최소화하고,
데이터 무결성을 보장하는 과정을 의미합니다. 이를 통해 데이터 저장 용량을 줄이고, 삽입·갱신·삭제 이상(Anomaly) 현상을 해결할 수 있습니다. 정규화는 여러 단계가 존재하며, 대표적으로 1정규화(1NF), 2정규화(2NF), 3정규화(3NF), BCNF가 있습니다.
각 정규화 단계
•
1 정규화(1NF) 는 테이블 컬럼의 값이 원자값(Atomic Value)을 가지도록 정리하는 것을 의미합니다.
•
2 정규화(2NF) 는 1 정규화를 진행한 테이블에서 완전 함수 종속을 만족할 수 있도록 테이블을 분해하는 것인데요. 쉽게 표현하자면, 기본 키의 일부에만 종속된 속성이 없도록 분해하는 것을 의미합니다. A 속성을 통해서 B 속성의 값이 유일하게 정해지는 관계에서 A를 결정자라고 합니다. 사용자 ID가 기본 키이며 값이 1입니다. 그리고, 사용자 ID 1번에 대응되는 유일한 이름 속성 값이 "B" 이라고 했을 때, 이름 속성의 결정자는 사용자 ID입니다. 2NF를 만족하기 위해서는 기본키의 부분 집합이 결정자가 될 수 없습니다.
•
3 정규화(3NF) 는 2 정규화를 진행한 테이블에서 이행적 종속을 제거하기 위해 테이블을 분해하는 것을 의미합니다. A가 B를 결정하고, B가 C를 결정하는 경우에는 A가 C의 결정자가 되는데요. 이를 이행적 종속이라고 합니다. 3NF을 만족하기 위해서는 이행적 종속이 제거되도록 테이블을 분리해야 합니다.
•
BCNF 정규화 는 3 정규화를 진행한 테이블의 모든 결정자가 반드시 후보키가 될 수 있도록 테이블을 분해하는 것을 의미합니다. BCNF를 만족하기 위해서는 후보키가 아닌 결정자가 존재하지 않도록 테이블을 분리해야 합니다.
역정규화
역정규화(Denormalization) 는 정규화된 데이터베이스에서 쓰기 성능을 희생하고 읽기
성능을 향상하기 위해 사용되는 전략입니다. 예를 들어, 전체 게시글의 수나 좋아요의 수를 계산해 특정 컬럼에 저장해서 읽기 성능을 항상 시킬 수 있습니다. 역정규화된 데이터베이스에서는 데이터의 중복을 허용하기 때문에 데이터의 일관성을 맞추기 위한 추가적인 작업이 필요합니다.