정규화
- 관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상 현상을 방지하고, 데이터의 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정을 말한다.
정규화의 장점
- 데이터베이스 변경 시 이상 현상(Anomaly)을 제거할 수 있다.
- 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되어 응용프로그램의 생명을 연장시킨다.
정규화의 단점
- 릴레이션의 분해로 인해 릴레이션 간의 JOIN 연산이 많아진다.
- 질의에 대한 응답 시간이 느려질 수도 있다.
- 만약 JOIN이 많이 발생하여 성능 저하가 나타나면 반정규화(De-normalization)을 적용할 수도 있다.
정규화 단계
제 1정규화 (1NF)
테이블 내의 속성값은 원자값을 가지고 있어야 한다.
- 각 컬럼이 하나의 속성만을 가진다.
- 하나의 컬럼은 같은 종류나 타입을 가져야 한다.
- 각 컬럼이 유일한(unique) 이름을 가져야 한다.
- 칼럼의 순서가 상관없어야 한다.
제 2정규화 (2NF)
부분 함수 종속을 제거한다 (완전 함수 종속 관계)
- 제 1정규형을 만족해야 한다.
- 모든 컬럼이 부분적 종속이 없어야 한다. 즉, 모든 컬럼이 완전 함수 종속을 만족해야 한다.
🔍 부분 함수 종속 (Partial Functional Dependency)
🔍 완전 함수 종속 (Full Functional Dependency)
- 기본키의 부분집합이 결정자가 되어선 안 된다는 것이다.
제 3정규화 (3NF)
이행 함수 종속을 제거한다.
- 제 2정규형을 만족해야 한다.
- 기본키를 제외한 속성들간의 이행 종속성(Transitive Dependency)이 없어야 한다.
🔍 이행 함수 종속(Transitive Functional Dependency)
A -> B
, B -> C
일 때 A -> C
를 만족하면 이행 함수 종속이라고 한다.
보이스-코드 정규화 (BCNF)
결정자가 후보키가 아닌 함수 종속을 제거한다.
- 제 3정규형을 만족해야 한다.
- 모든 결정자가 후보키 집합에 속해야 한다.
제 4정규화 (4NF)
다치 종속을 제거한다
- BCNF를 만족해야 한다.
- 다중값 종속(다치 종속)이 없어야 한다.
🔍 다치 종속 (Multi-valued Dependency)
- 같은 테이블 내에 독립적인 두 개 이상의 컬럼이 또 다른 컬럼에 종속되는 것을 말한다.
- 즉,
A -> B
인 의존성에서 단일 값 A와 다중 값 B가 존재한다면 다치 종속이라고 할 수 있다. (다치 종속은 이중 화살표로 표기한다.)
- 다치 종속은 최소 2개의 컬럼이 다른 컬럼에 종속되어야 하기 때문에 최소 3개의 컬럼이 필요하다.
제 5정규화 (5NF)
조인 종속을 제거한다.
- 4NF를 만족해야 한다.
- 더 이상 비손실 분해를 할 수 없어야 한다.
🔍 조인 종속(Join Dependency)
- 하나의 릴레이션을 여러개의 릴레이션으로 분해하였다가, 다시 조인했을 때 데이터 손실이 없고 필요없는 데이터가 생기는 것을 말한다.
- 다치 종속의 개념을 더 일반화한 것이다.