본문 바로가기

데이터베이스 Database

Chapter 7 데이터 종속성과 정규화 ✍

설계의 예

 

잘못된 설계로 인한 이상(Anomaly)

  • 삭제 이상(deletion anomaly)
    • 연쇄 삭제(triggered deletion)를 유발
      e.g. 200번 학생이 'C123' 과목 등록을 취소 → 200번 학생의 학년정보 소실
    • 하나의 정보(데이터)를 삭제하면 다른 정보(데이터)도 같이 사라짐
  • 삽입 이상(insertion anomaly)
    • 학번이 600번, 이름이 홍길동, 2학년, 전기과인 학생 정보(투플)를 삽입
      e.g. insert into 수강 values (600, 'NONE', 'N', 2, '홍길동', '전기')
      → 불필요한 정보(임시과목번호)를 채워서 삽입해야 함
  • 갱신 이상(update anomaly)
    e.g. 400번 '송병길'의 학년을 4에서 3으로 변경 → 4개의 투플을 모두 갱신해야함
    • 하나의 속성값을 변경하려면 여러 개의 투플을 갱신해야 함

정규화의 필요성

  • Anomaly가 발생한 이유
    • 상이한 종류의 정보를 하나의 릴레이션으로 표현했기 때문!
      • 속성들 사이에 존재하는 종속관계(의존관계)를 인식하지 못하고 무리하게 하나의 릴레이션으로 표현
      • 데이터의 중복을 발생시킴
  • 정규화(Normalization)
    • 속성들 간의 종속관계별로 별도의 릴레이션으로 분해(decomposition)하는 과정 → 스키마 변환(schema transformation)
      • 동등한 정보를 나타낼 수 있으면서 더 좋은 스키마로 변환!

릴레이션 분해의 원리

  • 정보 표현의 무손실(lossless representation of information)
    • 변환된 스키마는 변환 전 스키마의 정보를 모두 표현할 수 있어야 하고 구조적으로는 더 바람직해야 함
    • 무손실 분해(lossless/non-loss decomposition)
  • 최소의 데이터 중복성(minimal data redundancy)
    • 중복으로 인한 anomaly를 제거
  • 분리의 원칙(principle of separation)
    • 속성들 간의 의존성별로 별도의 릴레이션으로 분리해 표현해야 함

함수 종속(FD: Functional Dependency)

  • 릴레이션 내의 속성 X와 Y에 대해
    • 시간에 관계 없이 속성 X의 값에 대해 Y의 값이 오직 하나만 연관됨
  • 함수 종속 관계는 릴레이션이 계속해서 변경되더라도 항상 지켜지는 의미적 관계여야 함
    • 어느 한 순간의 릴레이션 투플들만을 근거로 판단하는 것은 아님

 

함수 종속의 예 (학생 릴레이션)

학번 → 이름

학번 → 학년

학번 → 학과

또는

학번 → (이름, 학년, 학과)

 

{학번, 과목번호} → 성적  -- 완전 함수 종속

학번 → 학년

{학번, 과목번호} → 학년 -- 부분 함수 종속

 

제1정규형(1NF: First Normal From)

  • 릴레이션 R에 속한 모든 도메인이 원자 값으로만 되어 있는 릴레이션
  • 릴레이션 모델을 따르는 릴레이션은 기본적으로 만족함

제1정규형을 만족하는 릴레이션의 예

강의 자료 참고

 

제2정규형(2NF: Second Normal Form)

  • 릴레이션 R이 1NF이고, 기본키에 속하지 않은 속성은 모두 기본키에 완전 함수 종속임

여전히 남아있는 Anomalies

강의 자료 참고

 

제3정규형(3NF)

  • 릴레이션 R이 2NF이고 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닌 경우

 

3NF의 문제점

  • 아래의 경우에는 적용하기 곤란
    • 복수의 후보키를 가지고
    • 후보 키들이 두 개 이상의 속성으로 구성되고
    • 후보 키의 속성들이 서로 중첩되는 경우

보이스코드 정규형(BCNF)

  • Boyce/Codd Normal Form
    • 릴레이션 R의 결정자가 모두 후보키임
  • 3NF보다 단순

3NF이나 BCNF는 아닌 예

강의 자료 참고

 

정규형 간의 관계

1NF ⊃ 2NF ⊃ 3NF ⊃ BCNF ⊃ 4NF ⊃ 5NF(PJ/NF)

 

정규화의 수준

  • 모든 릴레이션이 5NF를 만족할 필요는 없음
  • 정규화의 수준은 데이터베이스 설계자가 선택
  낮은 정규화 수준 높은 정규화 수준
데이터 중복 High Low
데이터 중복으로 인한 Anomaly High Low
질의 실행 속도 대체로 Fast 대체로 Slow
(join이 필요할 수 있기 때문)

정규화 수준이 낮은 릴레이션은 높은 릴레이션들의 join