포스트

[DB] 정규화

1. 정규화

  • 이상현상이 발생하는 릴레이션을 분해하여 이상현상을 없애는 과정
  • 이상현상이 있는 릴레이션은 이상현상을 일으키는 함수 종속성의 유형에 따라 등급을 구분 가능
  • 릴레이션은 정규형 개념으로 구분하며, 정규형이 높을수록 이상현상은 줄어듦

1. 정규화 이동수단과 릴레이션의 등급 구분

  • 정규화 정도는 항상 제 4정규형을 만드는 것이 옳지는 않음
  • 집에 갈때 비행기를 타고가지 않듯, 자신의 상황에 맞춰 적당한 정규형을 선택하는 것이 좋다.

2. 제 1정규형

  • 릴레이션 $R$의 모든 속성 값이 원자값을 가진 경우임

2.1. 제 1정규형으로 변환

  • 고객취미들(이름, 취미들) 릴레이션을 고객취미(이름, 취미) 릴레이션으로 바꾸어 저장하면 제 1정규형을 만족함

2. 제 1정규형 속성 값이 원자값을 갖도록 분해

  • 보통 릴레이션은 아무리 못해도 제1정규형을 만족하게 하는 것이 기본임

3. 제 2정규형

  • 릴레이션 R이 제 1정규형이고 기본키가 아닌 속성이 기본키에 완전 함수 종속인 경우

제 1정규형이 아니면 제 2정규형이 아니다!

  • 완전 함수 종속(full functional dependency): A와 B가 릴레이션 R의 속성이고 A → B 종속성이 성립할 때, B가 A의 속성 전체에 함수 종속하고 부분 집합 속성에 함수 종속하지 않을 경우를 말함

3. 제 2정규형 수강강좌 릴레이션: 후보키는 무엇인가?

3.1. 제 2정규형으로 변환

  • 수강강좌 릴레이션에서 이상현상 일으키는 (강좌이름, 강의실)을 분해함

3.1. 제 2정규형으로 변환 제 2정규형: 릴레이션의 분해

4. 제 3정규형

  • 릴레이션 R이 제 2정규형이고 기본키가 아닌 속성이 기본키에 비이행적(non-transitive)으로 종속할 때(직접 종속)를 말함

  • 이행적 종속: A → B, B → C가 성립할 때 A → C가 성립되는 함수 종속성

4. 제 3정규형 계절학기 릴레이션

4.1. 제 3정규형으로 변환

  • 계절학기 릴레이션에서 이상현상을 일으키는 (강좌이름, 수강료)를 분해함

4. 제 3정규형 변환 Caption

5. BCNF 정규형

  • 릴레이션 R에서 함수 종속성 X → Y가 성립할 때 모든 결정자 X가 후보키이면 BCNF(Boyce-Codd Normal Form) 정규형이라고 함

  • 잘 됐는지 확인법: 분해한 테이블을 다시 조인했을 때 동일한 테이블이 된 경우(무손실 분해가 된 경우) BCNF가 잘 된 것임

5. BCNF 정규형

5.1. BCNF 정규형으로 변환

  • 모든 결정자가 존재하면 후보키가 있지만, 결정자가 없다면(아무 영향 없는 것을 묶는다면) BCNF를 적용할 수 있음

5.1. BCNF 정규형으로 변환

6. 무손실 분해

  • 릴레이션 R을 릴레이션 R1과 R2로 분해할 때, R1 join R2 = R이면 무손실 분해(lossless-join decomposition)라고 함
  • R1 ∩ R2 → R1 혹은 R1 ∩ R2 → R2 중 하나를 만족해야 함

6. 무손실 분해

00tmp_6. 무손실 분해 temp img: 추후 정리 필요

00tmp_6. 무손실 분해 2 temp img: 추후 정리 필요

00tmp_6. 무손실 분해 3 temp img: 추후 정리 필요

7. 정규화 정리

  • 대부분의 릴레이션은 BCNF까지 정규화하면 실제적인 이상현상이 없어지기 때문에 보통 BCNF까지 정규화를 진행함.

7. 정규화 정리

테이블이 몇 정규형인지 확인할 때 절대 BCNF부터 확인하면 안되고, 1정규형부터 차근차근 확인해야 한다.

이 포스팅은 작성자의 CC BY-NC 4.0 라이선스를 준수합니다.