정규화
포스트
취소

정규화

정규화 (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가 성립하는 경우
  • 부분 함수 종속 (PFD, Partial Functional Dependency)
    • 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 종속됨을 의미한다.
      • 이를 만족시키려면 결정자는 여러 개의 속성들로 구성되어 있어야 한다.
    • X(A, B, C) → Y에서 A → Y가 성립하는 경우
  • 이행 함수 종속 (TFD, Transitive Functional Dependency)
    • X → YY → 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가 항상 참인건 아니기 때문이다.

제 4 정규형 (4NF)

  • 릴레이션이 보이스/코드 정규형을 만족하고,
    함수 종속이 아닌 다치 종속을 제거해야 한다.

제 5 정규형 (5NF)

  • 릴레이션이 제 4 정규형을 만족하면서,
    후보키를 통하지 않는 조인 종속을 제거해야 한다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.