정규화(Normalization)란
테이블 간 데이터 중복을 최소화하여 무결성을 지키고 DB 저장용량을 줄이며, insertion, update, delete anomaly를 최소화하는 행위이다.
데이터 무결성 : 데이터 무결성은 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미한다.
그리고 정규화는 방식(rule)에 따라 단계로 나뉘어진다.
초기 테이블에서 순차적으로 정규화를 진행하면 되지만, 현업에서는 최대 BCNF 단계 정도만 진행한다고 한다.
경우에 따라서 테이블 JOIN에는 큰 비용이 들 수 있어 정규화를 되돌리는 역정규화 또한 존재한다.
정규화 장, 단점
정규화의 장점
정규화의 단점
📌 제 1 정규화(1NF)
제 1 정규화란 테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것이다.
제 1 정규화는 다음과 같은 규칙들을 만족해야한다.

📌 제 2정규화(2NF)
제 2정규화란 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다. 여기서 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미한다.
제 2정규화는 다음과 같은 규칙을 만족해야한다.


📌 제 3정규화(3NF)
제 3정규화란 제 2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것이다. 여기서 이행적 종속이라는 것은 A->B, B->C가 성립할 때 A->C가 성립되는 것을 의미한다.
제 3 정규화는 다음과 같은 규칙을 만족해야 한다.

📌 BCNF(Boyce-codd Normal Form)
BCNF는 3차 정규화를 조금 더 강화한 버전이다. 이는 3차 정규화에서 해결할 수 없는 이상현상을 해결할 수 있다. BCNF란 3차 정규화를 만족하면서 모든 결정자가 후보키 집합에 속한 정규형이다.
BCNF는 다음과 같은 규칙을 만족해야 한다.


Ref. https://superohinsung.tistory.com/111#%EC%A0%9C%201%20%EC%A0%95%EA%B7%9C%ED%99%94(1NF)-1