릴레이션 정규화
정규화는 원래 릴레이션을 새로운 릴레이션 여러개로 분해해서 중복과 갱신 이상을 최소화하는 과정
1. 정규화 개요
갱신 이상
- 수정 이상
반복된 데이터 중에 일부만 수정하면 데이터 불일치가 발생
- 삽입 이상
불필요한 정보를 함께 저장하지 않고는 어떤 정보를 저장하는 것이 불가능
- 삭제 이상
유용한 정보를 함께 삭제하지 않고는 어떤 정보를 삭제하는 것이 불가능

- 수정 이상: 박영권의 부서이름을 개발에서 운영으로 바꾸면 이수민의 부서번호3의 개발과 이름이 겹쳐서 갱신 이상 발생
- 삽입 이상: 새로운 4 운영이라는 부서를 개설했는데 그 부서에 해당하는 사람이 없다면 갱신 이상 발생
- 삭제 이상: 첫째줄 튜플을 삭제하면 1 영업부의 정보가 사라져 갱신 이상 발생
정보의 중복
위의 사진을 아래 사진처럼 표현하면 (사원이름, 사원번호, 주소, 전화번호)에 해당하는 애트리뷰트의 중복을 최소화 가능

2. 함수적 종속성
- 정규화 이론의 핵심
- 애트리뷰트 간의 관계를 나타냄
- 제2정규형부터 BCNF까지 적용됨
결정자
- 어떤 애트리뷰트의 값은 다른 애트리뷰트의 값을 고유하게 결정
- 아래 그림에서 사원번호는 사원이름을 고유하게 결정
- A가 B를 결정한다, A가 B의 결정자이다, A→B로 표현
사원번호→사원이름, 주소, 전화번호, 부서이름
부서번호→부서이름
완전 함수적 종속성
- 기본키에 해당하지 않는 애트리뷰트가 기본키에 함수적 종속성을 가짐
- 직책은 기본키인 (사원번호, 부서번호)가 결정자
- 부서번호→직책
부분 함수적 종속성
- 기본키가 복합키일 때 부분키로만 다른 애트리뷰트를 결정할 수 있는 함수적 종속성
- 사원이름, 주소, 전화번호는 부분키인 사원번호가 결정자
- 부서이름은 부분키인 부서번호가 결정자

이행적 함수적 종속성
- A, B, C 애트리뷰트에서 A→B∪B→C와 A→C가 필요충분조건

3. 릴레이션 분해
- 한 개의 릴레이션을 여러 개의 릴레이션으로 분해
- 중복과 갱신 이상을 줄일 수 있는 장점
- 분해된 릴레이션으로 원래 릴레이션을 재구성하지 못하는 단점
- 원래는 조인이 필요없었던 질의가 분해 후에는 필요하게 되는 단점
무손실 분해
- 분해된 릴레이션을 조인했을 때 원래 릴레이션이 나오는 분해
- 분해되었을 때 정보가 손실되지 않아서 무손실

가짜 튜플
위의 수강 릴레이션에서 한 번 더 분해 후 조인하면 가짜 튜플 발생


4. 정규형 종류
제 1정규형
릴레이션에서 다치 애트리뷰트를 단일 애트리뷰트로 바꾸는 정규형
위 그림은 다치 애트리뷰트가 존재하므로 제 1정규형이 아님
과목번호 집합을 원소들로 분해함으로써 제 1정규형을 만족
제 2정규형
제 1정규형을 만족하고, 후보키가 아닌 애트리뷰트가 기본키에 완전 함수적 종속성을 가짐

학번→학과이름 / 학과이름→학과전화번호 이므로 학번→학과전화번호도 만족
제 3정규형
제 2정규형을 만족하고, 이행적 함수적 종속성을 제거한 것

BCNF
- 제 3정규형을 만족하고, 모든 결정자가 후보키인 것
- 대부분의 제 3정규형은 BCNF도 만족
분해 전은 BCNF를 만족하지 않지만, 분해함으로써 만족
정규화 장점
- 중복과 갱신 이상 감소
- 정규화 단계가 올라갈 수록 무결성 제약조건을 위한 코드가 감소
정규화 단점
- 높은 정규형이 꼭 최적인 것은 아닐 때도 있어서 필요없는 과정일 수 있음
- 원래 릴레이션은 조인이 필요없었는데 분해함으로써 필요한 경우 발생
5. 역정규화
- 분해된 릴레이션을 합침
- 정규화 단계가 감소
- 오히려 정규화전의 과정의 질의 처리가 효율이 좋다면 역정규화 하기도 함
- 이는 중복과 갱신 이상의 단점 보다 효율면의 장점이 더 클 때를 뜻함
