관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상 현상(Anomaly)을 방지하고, 데이터의 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정을 말한다.
💡 이상 (Anomaly)
정규화를 거치지 않은 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조작 시 발생하는 예기치 않은 현상을 말한다.
삽입 이상(Insertion Anomaly), 삭제 이상(Deletion Anomaly), 갱신 이상(Update Anomaly)이 있다.
" 테이블 내의 속성값은 원자값
을 가지고 있어야 한다. "
1NF는 다음을 만족해야 한다.
" 부분 함수 종속
을 제거한다. (완전 함수 종속 관계)"
2NF는 다음을 만족해야 한다.
💡 부분 함수 종속 (Partial Functional Dependency)
기본키 중에 특정 컬럼에만 종속되는 것을 말한다.
💡 완전 함수 종속 (Full Functional Dependency)
기본키의 부분집합이 결정자가 되어선 안 된다는 것이다.
(학생번호, 과목) 복합키가 기본키라고 하자.
이때 특정 과목의 지도교수는 과목명만 알면 알 수 있다. 즉, 지도교수 컬럼이 (학생번호, 과목)에 종속되지 않고 (과목)에만 종속적이다.
제 2 정규화를 통해 다음과 같이 분리해야 한다.
" 이행 함수 종속
을 제거한다. "
3NF는 다음을 만족해야 한다.
💡 이행 함수 종속 (Transitive Functional Dependency)
A → B
,B → C
일 때A → C
를 만족하면 이행 함수 종속이라고 한다.
ID → 등급
, 등급 → 할인율
, ID → 할인율
을 만족한다. 즉 이행 함수 종속이 존재한다.
제 3 정규화를 통해 다음과 같이 분리해야 한다.
" 결정자가 후보키가 아닌 함수 종속을 제거한다. "
BCNF는 다음을 만족해야 한다.
위의 테이블은 (학생번호, 과목)이 기본키로 지도교수를 알 수 있다. 그러나 지도교수를 알면 과목을 알 수 있으므로, 지도교수 → 과목 이 종속적이다.
즉, 후보키 집합에 속하지 않은 결정자가 존재하므로 BCNF를 만족하지 않는다.
BCNF를 만족하기 위해서는 다음과 같이 분리하면 된다.
" 다치 종속
을 제거한다. "
4NF는 다음을 만족해야 한다.
💡 다치 종속 (Multi-valued Dependency)
같은 테이블 내의 독립적인 두 개 이상의 컬럼이 또 다른 컬럼에 종속되는 것을 말한다.
즉, A → B 인 의존성에서 단일 값 A와 다중 값 B가 존재한다면 다치 종속이라고 할 수 있다. 이러한 종속을 A ↠ B 로 표기한다. (다치 종속은 이중 화살표(double arrow) ↠ 로 표기한다.)다치 종속은 최소 2개의 컬럼이 다른 컬럼에 종속되어야 하기 때문에 최소 3개의 컬럼이 필요하다.
위의 테이블은 Person ↠ Mobile
과 Person ↠ Food_Likes
두 가지 의존성을 가지므로 다치 종속이 존재한다.
제 4정규화를 통해 다음과 같이 분리할 수 있다.
" 조인 종속
을 제거한다. "
5NF는 다음을 만족해야 한다.
💡 조인 종속 (Joint dependency)
하나의 릴레이션을 여러개의 릴레이션으로 분해하였다가, 다시 조인했을 때 데이터 손실이 없고 필요없는 데이터가 생기는 것을 말한다. 조인 종속성은 다치 종속의 개념을 더 일반화한 것이다.
위의 4NF 테이블에 대해 조인 연산을 수행하면 다음과 같은 결과가 나온다.
위의 결과를 보면 제 4정규화를 수행하기 전 데이터와 다른 것을 알 수 있다.
데이터 손실은 없지만 필요없는 데이터가 추가적으로 생겼으므로 5NF를 만족하지 않는다.
제 5정규화를 통해 다음과 같이 분리할 수 있다.