← 목록으로
✏️ Study

데이터베이스 설계 | 13. 스키마 정제와 정규화

2024년 6월 1일

1. 데이터의 논리적 표현

  • 관계 스킴(Relation Scheme)의 설계 → 관계 모델을 이용하여 어떻게 실세계를 정확히 표현할 것인가?
    1. 애트리뷰트, 엔티티, 관계성 파악
    2. 관련된 애트리뷰트들을 릴레이션으로 묶음
      • 데이터 종속성 : 애트리뷰트들간의 관계성
      • 효율적인 데이터 조작
      • 데이터 중복성 감소
    3. 변칙적 성질인 이상(Anomaly) 예방

2. 이상의 원인과 해결책

  • 이상(Anomaly)의 원인 : 애트리뷰트들간에 존재하는 종속 관계를 하나의 릴레이션에 표현
  • 해결책 : 애트리뷰트들간의 종속 관계를 분석하여 여러 개의 릴레이션으로 분해(Decomposition)
  • 정규화(Normalization) : 데이터베이스를 설계한 후 설계 결과물을 검증하기 위해 사용

3. 함수 종속(Functional Dependency)

  • 함수 종속 : 어떤 릴레이션 R에서, 애트리뷰트 X의 값 각각에 대해 애트리뷰트 Y의 값이 하나만 연관
  • X → Y : 애트리뷰트 Y는 애트리뷰트 X에 함수 종속, 애트리뷰트 X는 Y를 함수적으로 결정
    • X는 Y의 결정자(Determinant) / Y는 X의 종속자(Dependent)
    • X, Y는 복합 애트리뷰트일 수 있음
    • 릴레이션 R에서 애트리뷰트 X가 후보 키(유일성, 최소성)이면, R의 모든 애트리뷰트 Y에 대해 X → Y 성립
    • 애트리뷰트 X가 반드시 후보 키라는 것을 요건을 하지 X
  • 암스트롱의 공리(Armstrong’s Axioms / X, Y, Z는 애트리뷰트(속성) 집합)
    • Reflexivity : Y ⊆ X이면, X → Y
    • Augmentation : X → Y이면, XZ →YZ(모든 Z의 경우)
    • Transitivity : X → Y이고, Y → Z이면, X → Z
    • Union : X → Y이고, X→Z이면, X→YZ
    • Decomposition : X → YZ이면, X → Y이고 X → Z
    • 정규화하기 위해 함수 종속성을 찾고 정제할 때 이용
  • 함수 종속 F의 폐포(Closure) : 함수적 종속성에 의해서 암시되는 모든 함수 종속들의 집합

4. 정규화(Normalization)

  • 정규화 : 어떤 일련의 제약 조건을 만족하는 릴레이션

  • 과정 : 애트리뷰트들과 이들의 제약 조건(종속성)들을 수집 → 수집된 결과를 명시된 제약 조건에 따라 여러 개의 릴레이션으로 분할 → 스키마 변환(Schema Transformation)

  • 정규화의 원칙

    1. 무손실 표현 : 같은 의미의 정보를 유지하면서 그러나 더 바람직한 구조
    2. 데이터의 중복성 감소
    3. 분리의 원칙 : 독립적인 관계는 별개의 릴레이션으로 표현 가능, 릴레이션 각각에 대해 독립적 조작이 가능
  • 정규화(Normal Form)의 종류

    image.png

    • 제1정규형(1NF) : 모든 도메인이 원자 값(AtomicValue)만으로 된 릴레이션, 모든 속성 값이 하나의 원자 값만 가짐
      • 복합 애트리뷰트 X에 대하여 X → Y가 성립할 때
        • 완전 함수 종속(Full Functional Dependency) : X’ ⊂ X 이고 X’→ Y를 만족하는 애트리뷰트 X’ 존재하지 X : {A, B} → C일 때, A → C or B → C가 성립하지 않아야 됨
        • 부분 함수 종속(Partial Functional Dependency) : X’ ⊂ X 이고 X’→ Y를 만족하는 애트리뷰트 X’ 존재함 : {A, B} → C일 때, A → C or B → C 성립
      • 이상 : 삽입 이상, 삭제 이상, 갱신 이상
        • 원인 : 기본 키에 부분 함수 종속된 애트리뷰트 존재
        • 해결 : 릴레이션을 분해하여 부분 함수 종속을 제거 → 2NF
    • 제2정규형(2NF) : 제1정규형을 만족 + 기본 키에 속하지 않는 모든 애트리뷰트들이 기본 키에 완전 함수 종속
      • 무손실 분해(Nonloss Decomposition)
        • 1NF → 분해 → 2NF / 2NF→ 조인 → 1NF
        • 프로젝트하여 분해된 릴레이션들은 자연 조인을 통해 원래의 릴레이션으로 복귀 가능
        • 원래의 릴레이션에서 얻을 수 있는 정보는 분해된 릴레이션들에서도 얻을 수 있음
      • Heath의 무손실 분해 : R(A,B,C)에서 A → B가 성립하면, R1(A, B)와 R2(A, C)로 무손실 분해 가능
      • 이상 : 삽입 이상, 삭제 이상, 갱신 이상
        • 원인 : 이행적 함수 종속(A → B이고 B → C ⇒ A → C)이 존재
        • 해결 : 릴레이션을 분해하여 이행적 함수 종속을 제거 → 3NF
    • 제3정규형(3NF) : 제2정규형 만족 + 후보 키에 속하지 않는 모든 애트리뷰트들이 후보 키에 이행적 함수 종속되지 X
      • 무손실 분해 : 2NF → 분해 → 3NF / 3NF → 조인 → 2NF
    • 보이스/코드 정규형(BCNF : Boyce Codd Normal Form)
      • 릴레이션 R의 모든 결정자가 후보 키이면 릴레이션 R은 BCNF에 속
      • 릴레이션 R이 BCNF에 속하면 R은 제1, 2, 3정규형 만족
      • 강한 제3정규형(Strong3NF) : 제3정규형과 제4정규형의 중간 형태
    • 제4정규형(4NF) : BCNF를 만족 + 릴레이션에서 다치 종속을 제거한 정규형
      • 다치 종속(Multivalued Dependency) : A → → B(A의 속성값은 B의 속성 값의 집합을 결정하게 됨)
    • 제5정규형(5NF) : 4NF를 만족 + 릴레이션에 존재하는 조인 종속이 후보 키를 통해서만 성립이 되도록하는 정규형
      • 조인 종속(Join Dependency) : 원래 릴레이션을 분해한 뒤 자연 조인한 결과가 원래의 릴레이션과 같은 결과가 나옴

    정규화 과정

    image.png

    정규형들간의포함관계

    image.png

  • 정규화 : 중복을 제거하기 위해 분해하는 것

    • 단점 : 테이블 수가 많아지면 조건 결합 즉 Join의 부담으로 답은 더 늦게 나올 수 있음
  • 역 정규화(비 정규화 또는 반 정규화) : 정규화된 릴레이션을 물리적 데이터 모델링 과정에서 성능을 향상시키기 위해 중복을 허용하고라도 다시 통합하여 구조를 재조정하는 것

    • 이유 : 너무 많은 분해로 중복은 줄었지만 연산 과정이 많이 걸리기 때문
    • 정규화 or 테이블 수 최적화 둘 중 하나를 선택할 수 밖에 없음
    • 제4정규형과 제5정규형은 중복은 최소화 되었지만 테이블 수가 너무 많음 → 실제 업무에서 활용 비율 높은 것(제3정규형, BCNF)