정규화(Normalization)
- 함수적 종속성 등의 종속성 이론을 이용하여 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정
- 좋은 데이터베이스 스키마를 생성하고 불필요한 데이터의 중복을 방지하여 정보 검색을 용이하게 할 수 있도록 허용한다.
정규화의 목적
- 데이터 구조의 안정성 최대화
- 중복 데이터의 최소화
- 수정 및 삭제 시 이상 현상 최소화
- 테이블 불일치 위험 간소화
이상현상(Anomaly)
릴레이션 조작 시 데이터들이 불필요하게 중복되어 예기치 않게 발생하는 곤란한 현상
삽입 이상(Insertion Anomaly)
데이터를 삽입할 때 불필요한 데이터가 함께 삽입되는 현상
삭제 이상(Deletion Anomaly)
릴레이션의 한 튜플을 삭제함으로써 연쇄 삭제로 인해 정보의 손실을 발생시키는 현상
갱신 이상(Update Anomaly)
튜플 중에서 일부 속성을 갱신함으로써 정보의 모순성이 발생하는 현상
정규화 과정

🔸 1정규형
- 어떤 릴레이션에 속한 모든 도메인이 원자값(Atomic Value)만으로 되어 있는 릴레이션
- 하나의 속성만 있어야 하고 반복되는 속성은 별도 테이블로 분리한다.
🔸 2정규형
- 1정규형을 만족하고 릴레이션에 내재된 부분 함수적 종속을 제거한다.
- 기본키가 아닌 애트리뷰트 모두가 기본키에 완전 함수 종속이 되도록 부분 함수적 종속에 해당하는 속성을 별도의 테이블로 분리 한다.
🔸 3정규형
- 1,2 정규형을 만족하고, 속성 간 이행적 함수 종속을 제거 한다.
🔸 BCNF(보이스/코드)정규형
- 1, 2, 3정규형을 만족하고, 결정자가 후보키가 아닌 함수종속이 제거되면 보이스/코드 정규형에 속한다.
- 후보키를 여러 개 가지고 있는 릴레이션에서 발생할 수 있는 이상 현상을 해결하기 위해 3정규형 보다 좀더 강력한 제약조건을 적용 한다.
- 보이스/코드 정규형에 속하는 모든 릴레이션은 3정규형에 속하지만, 3정규형에 속하는 모든 릴레이션이 보이스/코드 정규형에 속하지는 않는다.
🔸 4정규형
- 1, 2, 3, BCNF 정규형을 만족하고, 다가(다치) 종속을 제거한다.
🔸 5정규형
- 1, 2, 3, BCNF, 4정규형을 만족하고, 후보키를 통하지 않은 조인 종속을 제거한다.