정규화 (nomalization)
- 이상 현상을 제거하면서 데이터베이스를 올바르게 설계해 나가는 과정
- 이상 현상이 발생하지 않도록 릴레이션을 관련이 있는
속성들로만 구성하기 위해 릴레이션을 분해하는 과정 - 정규화를 통해 올바른 릴레이션의 설계를 완성할 수 있다.
- 정규화의 기본 목표는 관련이 없는 함수 종속성은 별개의 릴레이션으로 표현하는 것
이상 현상
- 이상 현상
- 데이터베이스를 잘못 설계했을 때 데이터의 중복이 발생하여,
릴레이션에 대한 데이터의 삽입 · 수정 · 삭제 연산을 수행할 때 발생하는 부작용
- 데이터베이스를 잘못 설계했을 때 데이터의 중복이 발생하여,
- 발생 원인
- 관련이 없는 속성들을 하나의 릴레이션에 모아두고 있기 때문이다.
삽입 이상 (insertion anomaly)
- 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
갱신 이상 (update anomaly)
- 중복 투플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
삭제 이상 (deletion anomaly)
- 투플을 삭제 시 꼭 필요한 데이터까지 함께 삭제되어 발생하는 데이터 손실의 문제
함수적 종속성 (FD, Functional Dependency)
- 정규화 과정에서 고려해야 하는 속성들간의 관련성
종속의 표현
X → Y
- X와 Y는 하나의 릴레이션을 구성하는 속성들의 부분 집합이다.
- 릴레이션 내의 모든 투플을 대상으로한 X 값에 대한 Y 값이 항상 하나라면
“X가 Y를 함수적으로 결정한다.”
또는 “Y”가 X에 함수적으로 종속되어 있다.”라고 한다. - X를 결정자라고 부른다.
- Y를 종속자라고 부른다.
함수 종속 관계 판단 시 유의점
- 현재 시점에 릴레이션에 포함된 속성 값만으로만 판단하면 안 된다.
- 릴레이션에서 속성 값은 계속 변할 수 있기 때문에
속성 자체가 가지고 있는 특성과 의미를 기반으로 판단해야 한다.
함수 종속 관계의 종류
- 완전 함수 종속 (FFD, Full Functional Dependency)
- 릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만,
속성 집합 X의 전체가 아닌 일부분에는 종속되지 않음을 의미한다. X(A, B, C) → Y
가 성립하는 경우
- 릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만,
- 부분 함수 종속 (PFD, Partial Functional Dependency)
- 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 종속됨을 의미한다.
- 이를 만족시키려면 결정자는 여러 개의 속성들로 구성되어 있어야 한다.
X(A, B, C) → Y
에서A → Y
가 성립하는 경우
- 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 종속됨을 의미한다.
- 이행 함수 종속 (TFD, Transitive Functional Dependency)
X → Y
와Y → Z
를 만족하여 X → Z가 성립하는 경우
- 다치 종속 (MVD, MultiValued Dependency)
- 하나의 릴레이션에서 둘 이상의 독립적인 다중값 속성이 존재하는 경우
- 예시
- A와 B라는 속성이 있을 때, A는 m개 중에 3개, B는 n개 중에 2개 고르는 경우
- 다중값 종속
- 각각 다중결정하여 발생하는 것으로 불필요한 정보가 중복되는 현상
- 조인 종속 (JD, Join Dependency)
- 둘로 나눌 때는 무손실 분해가 불가능하나, 셋 이상으로 나눌 때는 무손실 분해이 가능한 경우
예시 (완전 함수 종속과 부분 함수 종속)
고객아이디 → 고객이름
{고객아이디, 이벤트번호} → 당첨여부
예시 (이행 함수 종속)
사원번호 → 사원이름
사원이름 → 주소
사원번호 → 주소
정규화의 특징
- 각 정규형마다 만족시켜야 하는 제약조건이 존재한다.
- 릴레이션이 특정 정규형의 제약조건을 만족하면
릴레이션이 해당 정규형에 속한다고 표현한다. - 정규형의 차수가 높아질수록 요구되는 제약조건이 많아지고 엄격해진다.
- 일반적으로 차수가 높은 정규형에 속하는 릴레이션일수록
데이터 중복이 줄어 이상 현상이 발생하지 않는 바람직한 릴레이션일 수 있다. - 모든 릴레이션이 반드시 제 5규형에 속해야 하는 것은 아니다.
- 릴레이션의 특성을 고려하여 적합한 정규형을 선택해야 한다.
- 일반적으로는 기본 정규형에 속하도록 정규화를 하는 것이 대부분이다.
정규화의 종류
- 정규형
- 기본 정규형
- 제 1 정규형
- 제 2 정규형
- 제 3 정규형
- 보이스/코드 정규형
- 고급 정규형
- 제 4 정규형
- 제 5 정규형
- 기본 정규형
바깥쪽 → 안쪽
비정규형 릴레이션
→ 제 1 정규형 릴레이션 → 제 2 정규형 릴레이션 → 제 3 정규형 릴레이션
→ 보이스/코드 정규형 릴레이션 → 제 4 정규형 릴레이션 → 제 5 정규형 릴레이션
무손실 분해 (nonloss decomposition)
자연 조인을 하면 원래의 릴레이션으로 다시 복원할 수 있도록, 정보의 손실 없이 릴레이션을 분해하는 것
(정규화 과정 중에 수행되는 릴레이션의 분해는 무손실 분해여야 한다.)
제 1 정규형 (1NF)
- 릴레이션에 속한 모든 속성의 도메인이 원자 값으로만 구성되어 있어야 한다.
- 예시
- “E01,E02,E03” → “E01”, “E02”, “E03”
제 2 정규형 (2NF)
- 릴레이션이 제 1 정규형에 속하고,
기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되야 한다. - 제 1 정규형에 속하는 릴레이션의 부분 함수 종속을 제거하고,
모든 속성이 기본키에 완전 함수 종속이 되도록 릴레이션을 분해해야 한다.
제 3 정규형 (3NF)
- 릴레이션이 제 2 정규형에 속하고,
기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않아야 한다.
보이스/코드 정규형 (BCNF)
- 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 경우
- 강한 제 3 정규형이라고 부른다.
- BCNF ⊂ 3NF는 항상 참이지만,
3NF ⊂ BCNF가 항상 참인건 아니기 때문이다.
- BCNF ⊂ 3NF는 항상 참이지만,
제 4 정규형 (4NF)
- 릴레이션이 보이스/코드 정규형을 만족하고,
함수 종속이 아닌 다치 종속을 제거해야 한다.
제 5 정규형 (5NF)
- 릴레이션이 제 4 정규형을 만족하면서,
후보키를 통하지 않는 조인 종속을 제거해야 한다.