본문 바로가기

컴퓨터 공학/데이터베이스

정규화 Normalization

1. 성능 데이터 모델링

  • DB 성능 향상을 위한 사항을 데이터 모델링에 반영하는 것
  • 분석, 설계 시점에 수행해야 하고 이 시점이 늦어질수록 재업무 비용 증가
  • 정규화는 반드시 수행해야 하고
  • DB용량 산정, 트랜잭션 유형 파악을 통한 반정규화를 수행할 수도 있음

2. 함수적 종속성

  • 정규화
    • 데이터 분해 과정
    • 이상현상 anomaly 제거
    • 목표 : 테이블 간 중복된 데이터를 제거 → 무결성 Integrity 유지, 용량 축소
  • 함수적 종속성 Functional Dependency;FD
    • 테이블(릴레이션)에 속성 X, Y가 있다고 가정
    • X 값을 알면 Y값을 식별할 수 있고, X값에 따라 Y값이 달라지는 경우; Y는 X에 함수적으로 종속된다고 함 ex) 학번 → 이름, 학번 → 나이, 학번 → 성별 (학번으로 모든 학생 튜플을 식별할 수 있으므로, 즉, 모든 속성들은 기본키에 함수적으로 종속됨)
    • X : 결정자, Y: 종속자 | X → Y
    • 종류
      1. 완전 함수적 종속 full functional dependency : 종속자가 기본키에 종속되는 경우 기본키가 복합키인 경우 기본키의 구성 속성 모두에 종속
      2. 부분 함수적 종속 partial functional dependency : 종속자가 기본키가 아닌 다른 속성에 종속되는 경우, 기본키가 복합키인 경우 기본키의 구성속성 중 일부에 종속되는 경우
      3. 이행적 함수 종속 transitive functional dependency : x→y, y→z 종속 관계가 있는 경우 x→z가 성립하는 경우

3. 정규화 이론

  • 1,2,3차 정규화는 함수적 종속성과 관련됨
  • 4차는 다치 종속을 제거
  • 5차 정규화는 조인에 의한 이상현상을 제거
  • 정규화 차수가 높아질수록 제약조건이 증가, 연산 시간 증가
  • 정규화의 효과
    • 입출력 데이터 양을 줄여 성능을 향상시킴
    • 유연해짐 (high cohesion loose coupling)
    • 개념이 세분화되어 재활용 가능성이 증가
    • 데이터 중복 최소화 → 용량 아낌
    • 반명, 과도한 정규화는 성능 저하를 유발할 수도 있음 조회 시 처리 조건에 따라 조인을 많이 해야돼서 cpu, 메모리 사용량이 늘수도 있음 → 반정규화필요

4. 제1 정규화

  • 속성이 원자값 (atomic value)를 갖도록 테이블을 분해하는 것

5. 제2 정규화

  • 제1 정규화가 된 테이블에 대해서 부분 함수 종속을 제거하고 완전 함수 종속을 만족하도록 테이블을 분해하는 것
  • 기본키가 복합키인 경우, 구성 속성의 일부에 종속되는 속성이 있으면 안됨
  • 예제
  • 테이블 [ 학번 | 강의명 | 강의실 | 성적 ] 이렇게 있는 경우 학번 + 강의명이 기본키 → 성적 결정 그런데 강의명 → 강의실 이러한 종속성은 기본키의 부분집합을 결정자로 종속되는 속성이 있는 경우로, 이 부분 함수적 종속이 없어져야 한다. [ 강의명 | 강의실 ] + [ 학번 | 강의명 | 성적] 으로 테이블을 분리해야함

6. 제3 정규화

  • 제2 정규화가 수행된 테이블에 대해서 이행적 종속을 없애도록 테이블을 분해하는 것
  • 예제
  • [ 강의아이디 | 강의명 | 교수명 ] 강의아이디로 강의명이 도출되고, 강의명으로 교수명이 도출된다. 그런데 강의아이디로 교수명을 도출할 수도 있다 [ 강의아이디 | 강의명 ] + [ 강의아이디 | 교수명 ] 으로 분해해야 함

7. 보이스코드 정규화 BCNF Boyce-Codd Normal Form

  • 제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것
  • 예제
  • [ 학생번호 | 강의명 | 교수 ] 기본키 = 학생번호 + 강의명 데이터를 보고 일단 모든 종속을 찾는다. (학생번호 + 강의명 → 교수 / 교수 → 강의명) 이때 교수는 기본키도, 후보키도 아니다 그런데 결정자이므로 이걸 제거하겠다는 뜻 [ 학생 번호 | 교수 ] + [ 강의명 | 교수] 로 분해해야 함

8. 제4 정규화

9. 제5 정규화

  • 결합 종속 join dependency를 분리하는 과정
  • 결합 종속 : 분해한 릴레이션을 결합하면 다시 원래의 릴레이션으로 돌아가는 것 (무손실 분해)
  • → 즉, 별 의미가 없는 분래