우아한테크코스 테코톡

짱구의 정규화

https://youtu.be/DHyYQod48pk

짱구의 정규화

정규화 정의

  • 정규화는 왜하지?
    • 한 릴레이션에 여러 엔티티의 애트리뷰트들이 존재하면 정보가 중복 저장된다.
      • 저장 공간 낭비
      • 갱신 이상 발생
  • 갱신 이상
    • 삽입 이상
      • 불필요한 정보를 함께 저장하지 않고는 어떤 정보를 저장하는 것이 불가능
    • 삭제 이상
      • 유용한 정보를 함께 삭제하지 않고는 어떤 정보를 삭제하는 것이 불가능
    • 수정 이상
      • 반복된 데이터 중에 일부만 수정하면 데이터의 불일치가 발생
    • 이런 문제를 해결하기 위해서 정규화를 진행한다.
  • 정규화란?
    • 관계형 데이터베이스 설계 시 중복과 갱신 이상을 최소화하기 위해서 데이터를 구조화하는 작업
  • 릴레이션 분해
    • 정규화가 진행되면 기존의 릴레이션이 분해된다.
      • 분해된 릴레이션들은 무손실 조인을 보장해야 한다. ( 분해된 릴레이션들을 하나로 합쳤을 때 정확히 원래 릴레이션들의 정보가 나와야 한다. )
  • 함수적 종속성
    • 정규화가 진행되면 기존의 릴레이션이 분해된다.
      • 분해된 릴레이션들은 함수적 종속성을 보장해야 한다. ( 애트리뷰트(속성) X의 값이 애트리뷰트 Y의 값을 유일하게 결정한다면 Y가 X에 함수적으로 종속한다고 말한다. )
  • 완전 함수적 종속성
    • 어떤 애트리뷰트가 기본키에 대해 완전히 종속적일 때를 말한다.
    • img.png
      • 회원번호와 스터디번호가 기본키로 되어있는데 직책을 방장도 있고 부반장도 있고 회원도 있다 근데 회원번호로만 결정 되지도 않고 스터디 번호로만 결정되지 않고 두개가 한번에 있어야 결정되기 때문에 이런 상태를 완전 함수적 종속성이라고 한다.
  • 부분 함수적 종속성
    • 어떤 애트리뷰트가 기본키에 대해 부분적으로 종속적일 때를 말한다.
    • img.png
      • 이름은 회원번호에만 결정될 수도 있고 스터디 명과 스터디 생성일은 스터디번호로만 결정이 된다. 이런 애들을 부분 함수적 종속성이라고 한다.
  • 이행 함수적 종속성
    • 릴레이션에서 X,Y,Z 라는 3개의 속성이 있을 때 X->Y, Y->Z 이란 종속 관계가 있을 경우 X->Z가 성립될 때를 말한다.
    • img.png

정규화 과정

  1. 제1 정규형
  2. 제2 정규형
  3. 제3 정규형
  4. 보이스 코드 정규형
  5. 제4 정규형
  6. 제5 정규형
  7. 제6 정규형
  • 제1 정규형
    • 릴레이션의 모든 애트리뷰트가 원자값만을 갖는다.
      • 반복 그룹이 나타나지 않아야 한다.
    • img.png
    • 하나의 튜플로 표현 ↓
    • img.png
      • 왼쪽에 짱구, 흰둥이, 주문일자 중복된다.
    • 새로운 릴레이션으로 분리 ↓
    • img.png
  • 제2 정규형
    • 릴레이션이 제1 정규형을 만족하고.
    • 기본키가 아닌 모든 애트리뷰트가 기본키에 완전 함수 종속되도록 릴레이션을 분해한다.
      • 하나의 애트리뷰트로 이루어진 기본키일때는 제2 정규형도 만족을 해서 신경 쓸 필요가 없다.
      • 기본키가 두 개 이상의 애트리뷰트로 구성되었을 경우에만 제2 정규형을 만족하는 가를 고려할 필요가 있다.
    • img.png
      • 주문 상품에서 상풀코드와 상품명이 계속 반복돼서 보이는 것을 확인할 수 있다. 중복 되는 이유는 상품명은 주문 번호로 결정이 되는 게 아니라 상품 코드로만 결정이 된다. 즉 상품명은 부분 함수에 종속이 된다.
      • 그래서 이 독립된 릴레이션으로 분리 ↓
      • img.png
  • 제3 정규형
    • 릴레이션이 제2 정규형을 만족하고.
    • 기본키가 아닌 모든 애트리뷰트가 기본키에 이행적 함수 종속 되지 않도록 릴레이션을 분해한다.
    • img.png
      • 주문쪽을 보면 회원이 주문을 추가할때마다 회원번호와 회원이름이 중복되는 거를 볼 수 있다. 회원 이름은 회원 번호에 따라 결정되기 때문에 중복이 된다.
      • 그래서 분리하게 되면 ↓
      • img.png

정규화 장점, 단점

  • 정규화 장점
    • 데이터 구조의 안정성 유지
    • 중복 값 & 널 값이 줄어든다.
    • 이상 현상 제거
    • 저장 공간 최소화
  • 정규화 단점
    • 릴레이션의 분해로 인해 릴레이션 간의 (JOIN)연산이 많아진다.
      • 조인을 하는 연산시간이 늘어날수도 있다.

© 2020. All rights reserved.

SIKSIK