DB 정규화

이하루·2025년 1월 24일

DB를 설계할 때마다 항상 따라 나오는 개념인 정규화에 대해서 이번 기회에 싹 정리해 보고자 한다.

❓ 정규화 (Normalization)

데이터 중복으로 인한 이상 현상을 없애기 위한 과정

✅ 1정규형 (1NF)

의미 : 모든 속성은 반드시 하나의 값을 가져야 한다.
조건 : 테이블의 열은 단일 값을 가지며, 여러 값이나 중첩된 데이터가 없어야 한다.

✅ 2정규형 (2NF)

의미 : 1정규형을 만족, 기본키가 아닌 모든 속성이 완전 함수 종속된다.
조건 : 부분 함수 종속을 제거. 기본키가 아닌 속성들이 기본키에 일부 의존해서는 안된다.

✅ 3정규형 (3NF)

의미 : 2정규형을 만족, 기본키가 아닌 모든 속성이 이행적 함수 종속이 아니어야 한다.
조건 : 기본키가 아닌 속성은 오로지 기본키에만 의존해야 한다.

✅ 보이스-코드 정규형 (BCNF)

의미 : 3정규형을 강화한 형태, 결정자는 후보키여야 한다.
조건 : 모든 결정자가 후보키가 되도록 분할한다.

✅ 4정규형 (4NF)

의미 : 보이스-코드 정규형을 만족, 다치 종속을 제거한다.
조건 : 하나의 속성이 다른 속성의 다치 종속 관계에 있어서는 안된다.
※ 다치 종속 : 같은 테이블 내에 두개 이상의 컬럼이 다른 컬럼에 종속되는 것을 의미. 단일 값 A에 다중 값 B가 존재한다면 "A ↠ B"로 표기하며, 최소 3개 이상의 컬럼이 존재해야 성립

✅ 5정규형 (5NF)

의미 : 4정규형을 만족, 테이블 간의 조인 종속을 제거한다.
조건 : 모든 정규형을 만족. 조인 전후로 레코드의 수가 동일해야 한다.

🌟 역정규화 = 반정규화 (Denormalization)

정규화를 통해 만들어진 중복이 제거된 테이블을 성능이나 편의성을 위해 조작하는 과정이다. 즉, 상위 정규형에서 하위 정규형으로 회귀하는 과정이라고 볼 수 있다. (ex. BCNF → 3NF)
정규화는 하면 할수록 중복된 데이터는 줄어들지만 반대로 테이블 수가 늘어나는데, 테이블의 증가로 인해, 과도한 조인이 발생하게 된다. 중복된 데이터를 감안하더라도, 테이블 수를 줄이고 조인을 최소화시키기 위한 작업이 역정규화이다.

DB를 설계할 떄, 중복 데이터의 최소화(정규화)와 과도한 조인을 통한 데이터 습득(역정규화) 간의 적정 수준을 잘 선택할 필요가 있을 것이다.

profile
어제보다 더 나은 하루

0개의 댓글