본문 바로가기
데이터베이스

[데이터베이스론] 9장. 정규화

by CuckooBird 2024. 6. 7.

정규화의 개념과 이상 현상

  • 정규화: 데이터베이스를 올바르게 설계해 나가는 과정
  • 정규화의 목적
    • 불필요한 데이터 제거 및 중복 최소화
    • 데이터베이스 구조 확장 시 재디자인 최소화
    • 다양한 관점의 쿼리를 지원
    • 무결성 제약조건의 시행 간소화
    • 이상현상을 방지
  • 이상 현상 (anomaly): 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입/수정/삭제 연산을 수행할 때 발생할 수 있는 부작용
  • 이상 현상의 종류
    • 삽입 이상: 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제 → 삽입 불가
    • 갱신 이상: 중복 튜플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
    • 삭제 이상: 튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제 
  • 정규화와 함수적 종속성
    • 정규화: anomaly가 발생하지 않도록, 릴레이션을 관련있는 속성들로만 구성하기 위해 릴레이션을 decomposition하는 과정
    • functional dependency를 판단하여 정규화를 수행함
  • functional dependency (함수적 종속성)
    • 속성들간의 관련성
  • 정규화: functinoal dependency를 이용하여, 릴레이션을 연관성이 있는 속성들로만 구성되도록 릴레이션을 decompositon하여 anomaly가 발생하지 않도록 하는 과정

함수 종속

  • 함수 종속의 개념
    • 릴레이션 내의 모든 튜플에서 하나의 X값에 대한 Y값이 항상 하나
    • X와 Y는 하나의 릴레이션을 구성하는 속성들의 부분 집합
    • X → Y로 표현 (X는 결정자, Y는 종속자)
    • 함수 종속 다이어그램: 함수 종속 관계를 도식화하여 표현한 것
  • 함수 종속 관계 판단 시 유의 사항
    • 속성 자체의 특성과 의미를 기바능로 함수 종속성을 판단해야 함
      • 속성 값은 계속 변할 수 있으므로 현재 릴레이션에 포함된 속성 값만으로 판단하면 안 됨
    • 일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성들을 함수적으로 결정함
    • 기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자가 될 수 있음 (** → 이런 경우에는 anomaly의 가능성이 있기 때문에 제거를 해주어야 한다)
  • 함수 종속 관계
    • 완전 함수 종속 (FFD; Full Functional Dependency)
      • 릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만, 속성 집합 X의 전체가 아닌 일부분에는 종속되지 않음을 의미
      • 일반적으로 ㅎ마수 종속은 완전 함수 종속을 의미함
      • 예) 당첨여부는 {고객아이디, 이벤트번호}에 완전 함수 종속됨
    • 부분 함수 종속(PFD; Partial Functional Dependency) (**→ 불필요함. 제거해야하는 대상)
      • 릴레이션에서 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미
      • 예) 고객이름은 {고객아이디, 이벤트번호}에 부분 함수 종속됨
  • 고려할 필요가 없는 함수 종속 관계
    • 결정자와 종속자가 같거나, 결정자가 종속자를 포함하는 것처럼 당연한 함수 종속 관계는 고려하지 않음

기본 정규형과 정규화 과정

  • Nomalization: fuctional dependency를 이용하여 relation을 decomposition하여 anomaly를 없애는 과정
  • 주의 사항
    • 정규화를 통해 릴레이션은 무손실 분해(nonloss decomoposition)되어야 함
      • 릴레이션이 의미상 동등한 릴레이션들로 분해되어야 하고, 분해로 인한 정보 손실이 발생하지 않아야 함
      • 분해된 릴레이션들을 자연 조인하면 분해 전의 릴레이션으로 복원 가능해야 함
  • 정규형(NF; Normal Form)
    • 릴레이션이 정규화된 정도
    • 각 정규형마다 제약조건이 존재하며 일반적으로 정규형의 차수가 높아질수록 요구되는 제약조건이 많아지고 엄격해짐
    • 릴레이션의 특성을 고려해서 적합한 정규형을 선택
  • 제 1 정규형 (1NF; First Normal Form)
    • 릴레이션의 모든 속성이 더는 분해되지 않는 원자 값(atomic value)만 가지면 제 1정규형을 만족함
    • 제 1정규형을 만족해야 관계 데이터베이서의 릴레이션이 될 자격이 있음
    • 제 1정규형 (1NF): 릴레이션에 속한 도메인의 원자 값(atomic value)으로만 구성되어 있으면 제 1정규형에 속한다. (** 다중 값 제거)
      anomaly 현상 발생 (등급과 할인율이 부분함수 종속)
    • 이상 현상 발생 이유
      • 기본키인 {고객아이디, 이벤트번호}에 완전 함수 종속되지 못하고 일부분인 고객아이디에 종속되는 등급과 할인율 속성이 존재하기 때문
    • 문제 해결 방법
      • 부분 함수 종속이 제거되도록 이벤트참여 릴레이션을 분해
        → 분해된 릴레이션은 제 2정규형에 속하게 됨
  • 제 2 정규형(2NF; Second Normal Form)
    • 릴레이션이 제 1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제 2정규형을 만족함
    • 제 1정규형에 속하는 릴레이션이 제 2정규형을 만족하게 하려면
      부분 함수 종속을 제거하모든 속성이 기본키에 완전 함수 종속되도록 분해

    • 제 2정규형(2NF): 릴레이션이 제 1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제 2정규형에 속한다.
      고객 릴레이션이 함수 종속성을 여러개 포함하여 anomaly 발생
    • 제 2정규형은 만족하지만 anomaly가 발생하는 이유 → 이행적 함수 종속이 존재하기 때문
    • 문제 해결 방법
      • 이행적 함수 종속이 제거되도록 고객 릴레이션을 분해
        → 분해된 릴레이션들은 제 3정규형에 속하게 됨
  • 이행적 함수 종속 (transitive FD)
    • 릴레이션을 구성하는 3개의 속성 집합 X, Y, Z에 대해 함수 종속 관계 X → Y와 Y Z가 존재하면 논리적으로
      X → Z 가 성립되는데, 이때 Z가 X에 이행적으로 함수 종속되었다고 함
      X → Y, Y → Z 이면 X → Z 성립
  • 제 3 정규형(3NF; Third Normal Form)
    • 릴레이션이 제 2 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제 3 정규형을 만족함
    • 제 2 정규형에 속하는 릴레이션이 제 3 정규형을 만족하게 하려면
      → 모든 속성이 기본키에 이행적 함수 종속이 되지 않도록 분해

    • 제 3정규형(3NF): 릴레이션이 제 2정규형에 속하고, 기본키가 아닌 모든 속성이 이행적 함수 종속이 되지 않으면 제 3정규형에 속한다.
  • 보이스/코드 정규형(BCNF; Boyce/Codd Normal Formal)
    • 필요성
      • 하나의 릴레이션에 여러 개의 후보키가 존재하는 경우, 제 3정규형까지 모두 만족해도 이상현상이 발생할 수 있음
    • 의미
      • 강한 제 3정규형 (strong 3NF)
        • 후보키를 여러 개 가지고 있는 릴레이션에 발생할 수 있는 이상 현상을 해결하기 위해 제 3 정규형보다 좀 더 엄격한 제약조건을 제시
        • 보이스/코드 정규형에 속하는 모든 릴레이션은 제 3정규형에 속하지만, 제 3정규형에 속하는 모든 릴레이션이 보이스/코드 정규형에 속하는 것은 아님
    • 보이스/코드 정규형(BCNF): 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키이면 보이스/코드 정규형에 속한다.
      담당강사번호가 후보키가 아닌데 인터넷강좌의 결정자가 됨 → BCNF정규화
  • 제 4 정규형
    • 릴레이션이 보이스/코드 정규형을 만족하면서, 함수 종속이 아닌 다치 종속(MVD; Multi Valued Dependency)을 제거하면 제 4 정규형에 속함
  • 제 5 정규형
    • 릴레이션이 제 4 정규형을 만족하면서, 후보키를 통하지 않는 조인 종속(JD; Join Dependency)을 제거하면서 제 5 정규형에 속함
  • 정규화 시 주의 사항
    • 모든 릴레이션이 제 5 정규형에 속해야만 바람직한 것은 아님
    • 일반적으로 제 3 정규형이나 보이스/코드 정규형에 속하도록 릴레이션을 decomposition하여 데이터 중복을 줄이고 anomaly를 해결하는 경우가 많음