데이터베이스 (8) 정규화

gmlwlswldbs·2021년 12월 15일
0

Computer Science

목록 보기
9/16

정규화의 개념과 이상 현상

정규화의 개념

  • 정규화 : 이상현상을 제거하면서 데이터베이스를 설계하는 방법. 설계 후 결과물을 검증하기 위해 사용하기도 한다
  • 이상 현상 : 데이터베이스 잘못 설계시 불필요한 데이터 중복이 발생하여 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 할 때 발생하는 부작용

이상 현상의 종류

  1. 삽입 이상 : 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입하는 문제
  2. 갱신 이상 : 중복 튜플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
  3. 삭제 이상 : 튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제

정규화의 필요성

  • 이상 현상이 발생하는 이유 : 관련 없는 데이터(속성)들을 하나의 릴레이션에 모아두고 있기 때문
    • 관련 있는 속성들로만 릴레이션 구성해야함 -> 정규화를 통해
    • 정규화란 관련 있는 속성들로만 구성하기 위해 릴레이션을 분해하는 과정
    • 함수적 종속성 고려
      • 함수적 종속성 : 정규화 과정에서 고려해야하는 속성들 간의 관련성
      • 일반적으로 릴레이션에 함수적 종속성이 하나 존재하도록 정규화해 분해

함수 종속

  • 함수 종속성의 표현
    • X -> Y : 어느 시점에서든 릴레이션 내의 모든 튜플을 대상으로 한 X값(결정자)에 대한 Y값(종속자)이 항상 하나
    • X가 Y를 함수적으로 결정한다.
    • Y가 X에 함수적으로 종속되어 있다.
    • ex. 고객아이디 -> (고객이름, 등급)
    • 계속 변할 수 있기 때문에 현재 시점에서 릴레이션에 포함된 속성 값만으로 판단하면 안된다
      • 속성 자체가 가진 특성과 의미를 기반으로 판단
      • ex. 고객 릴레이션의 고객 아이디는 기본키 속성이기 때문에 고객 아이디가 정해지면 오직 하나의 고객이름과 등급이 결정된다.
      • 기본키와 후보키는 그 특성으로 인해 다른 모든 속성들을 함수적으로 결정한다
  • 완전 함수 종속 (Fully Functional Dependency) : 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만 속성 집합 X의 전체가 아닌 일부분에는 종속되지 않음
    • ex. 고객아이디 -> 고객이름 / [고객아이디, 이벤트 번호] -> 당첨여부
      • 당첨여부가 [고객아이디, 이벤트 번호]에 종속되어 있는데 일부분이 아닌 속성 집합 전체에 종속되어 있음 : 완전 함수 종속
  • 부분 함수 종속 (Partial Functional Dependency) : 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨, 결정자가 여러 개의 속성들로 구성되어 있어야 한다
    • ex. 고객아이디 -> 고객이름 / [고객아이디, 이벤트 번호] -> 고객이름
      • 고객이름이 [고객아이디, 이벤트 번호]에 종속되어 있는데 [고객아이디, 이벤트 번호]의 일부분인 고객아이디에도 종속 : 부분 함수 종속

기본 정규형과 정규화 과정

정규화의 개념과 종류

  • 정규화 : 함수 종속성을 이용하여 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해해서 이상현상이 발생하지 않는 올바른 릴레이션으로 만들어 나가는 과정
  • 정규화의 목표 : 관련이 없는 함수 종속성은 별개의 릴레이션으로 표현하는 것
  • 일반적으로 차수가 높은 정규형일수록 데이터 중복이 줄어 이상현상이 발생하지 않음
    • 특성을 고려해 적합한 정규형 선택

제 1 정규형 (1NF)

  • 제 1 정규형 : 릴레이션에 속한 모든 속성의 도메인이 원자 값으로만 구성되어 있음
    • 원자값 : 속성이 더이상 분해되지 않음

제 2 정규형 (2NF)

  • 제 2 정규형 : 릴레이션이 제 1 정규형에 속하고 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제 2 정규형에 속한다

  • 기본키에 완전 함수 종속되지 않는 속성과 관련이 없는 속성이 같은 릴레이션에 존재하지 않도록 두 개의 릴레이션으로 분해

  • 분해할 때 주의할 점 : 분해한 것 다시 자연조인해서 복원할 수 있어야함
    = 의미적으로 동등한 릴레이션으로 분해해야 함
    = 무손실 분해 (정보의 손실 없이 릴레이션을 분해)

제 3 정규형 (3NF)

  • 제 3 정규형 : 릴레이션이 제 2 정규형에 속하고 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제 3 정규형
  • 이행적 함수 종속 (transitive FD) : 세 개의 속성 집합 X, Y, Z에 대해서 함수 종속 관계 X->Y, Y->Z 가 존재하면 논리적으로 X->Z가 성립하는데 이를 속성 집합 Z가 속성 집합 X에 이행적으로 함수 종속되었다고 함.
  • 논리적으로 이행적 함수 종속이 유도되면 이상 현상 발생할 수 있음
  • 함수 종속 관계가 하나의 릴레이션에 여러 개 존재하기 때문에 발생
    • ex. 고객아이디 -> 등급, 등급 -> 할인율 : 고객아이디 -> 할인율 이라는 이행적 함수 종속 생김

보이스/코드 정규형 (BCNF)

  • 보이스/코드 정규형 (강한 제 3 정규형) : 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키
  • 하나의 릴레이션에 여러 개의 후보키가 있으면 이상현상 발생할 수 있다
  • 후보키가 아닌 결정자가 존재하지 않거나, 유일한 후보키이자 기본키를 가지면 이 정규형에 속함

제 4 정규형 (4NF), 제 5 정규형 (5NF)

  • 제 4 정규형 : 다치 종속을 제거
    • 다치 종속 : 두 개의 독립된 속성이 1:N 관계로 대응하는 관계. 속성이 여러개의 값을 가지는 경우
      • 속성 A, B, C에서 (A, C)값에 종속되는 B라는 속성이 A값에만 종속되고 C에는 독립일 경우
    • 다치 종속이 생기는 경우 중복되지 않게 릴레이션 분해
  • 제 5 정규형 : 후보키를 통하지 않는 조인 종속 제거
    • 조인 종속 : 무손실 분해가 되고 필요 없는 데이터가 생기지 않는 비부가적 분해가 된 릴레이션
      • 무손실 조인 : 자연조인하여 데이터 손실 없이 원래 릴레이션으로 복원
      • 비부가적 조인 : 조인한 결과에 원래 릴레이션에 없는 데이터가 존재하지 않음

0개의 댓글