Skip to content

Latest commit

 

History

History
210 lines (119 loc) · 11.4 KB

정규화.md

File metadata and controls

210 lines (119 loc) · 11.4 KB

1. 이상현상과 정규화

  • 이상(anomaly) 현상

    • 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용
  • 정규화

    • 이상 현상을 제거하면서 데이터베이스를 올바르게 설계해 나가는 과정

  • 이상(anomaly) 현상 설명을 위한 예

스크린샷 2020-11-08 오후 8 10 40


  • 삽입 이상(insertion anomaly)

    • 릴레이션에 새 데이터를 삽입하려면 불필요한 데이터도 함께 삽입해야 하는 문제
    • 삽입 이상 발생 예
      • 아직 이벤트에 참여하지 않은 아이디가 "melon", 이름이 "성원용", 등급이 "gold"인 신규 고객의 데이터는 이벤트참여 릴레이션에 삽입할 수 없음
      • 삽입하려면 실제로 참여하지 않은 임시 이벤트번호를 삽입해야 함

스크린샷 2020-11-08 오후 8 13 27


  • 갱신 이상(update anomaly)

    • 릴레이션의 중복된 투플들 중 일부만 수정하여 데이터가 불일치하게 되는 모순이 발생하는 문제

스크린샷 2020-11-08 오후 8 15 15

아이디가 apple인 고객의 등급이 gold에서 vip로 변경되면 apple 포함한 모든 투플을 수정해야 한다. 하지만 일부 투플에 대해서만 등급이 수정된다면 apple 고객이 서로 다른 등급을 가지는 모순이 발생한다.


  • 삭제 이상(deletion anomaly)

    • 릴레이션에서 투플을 삭제하면 꼭 필요한 데이터까지 손실되는 연쇄 삭제 현상이 발생하는 문제

스크린샷 2020-11-08 오후 8 23 01

아이디가 orange인 고객이 이벤트 참여를 취소해 관련 투플을 삭제하게 되면 이벤트 참여와 관련이 없는 고객이름, 등급 데이터까지 손실됨


  • 이상(anamoly) 현상 발생 원인

    • 속상 사이의 많은 연관 관계를 무리하게 하나의 릴레이션으로 표현할 때 발생
      • 이를 방지하려면 속성 사이의 연관 관계 즉, 종속성(dependency)을 분석하여 하나의 릴레이션에는 하나의 종속성만 표현되도록 릴레이션을 분해하면 됨
    • 기본적으로 연관성이 높은 속성들을 하ㅏㄴ의 릴레이션으로 구성하는 것이 바람직하다.

  • 정규화 과정에서 이상 문제를 해결하려면 연관성이 높은 속성들로만 릴레이션을 구성해야 함

    • 릴레이션 속성 사이의 연관성을 평가하기 위한 척도가 필요 -> 함수 종속성

2. 함수 종속성

  • 함수 종속성(FD: Functional Dependency)

    • 같은 릴레이션 안의 속성 간에 특정 속성 값이 함수적으로 다른 속성 값을 결정하는 종속 관계
    • 같은 릴레이션 안에 포함된 속성 사이의 연관성을 분석할 수 있는 척도
    • 속성1 -> 속성2로 표기
      • 어떤 속성2의 값이 다른 속성1의 값에 의해 결정되는 함수 종속 관계
      • 속성1은 속성2를 결정하는 결정자(determinant), 속성2는 속성1에 종속된 종속자(dependent)

스크린샷 2020-11-08 오후 8 40 12

그리고 고객의 예시를 하나 더 봐보자.

스크린샷 2020-11-08 오후 8 44 41

고객아이디의 속성 값에 대응되는 고객 이름, 등급 은 단 하나이다. (한마디로 1:1 관계이다. )


무엇이 결정자, 종속자인지 함수 종속성을 생각해보자

스크린샷 2020-11-08 오후 8 48 12


  • 함수 종속 다이어 그램

    • 하나의 릴레이션을 구성하는 속성들 간의 복잡한 함수 종속 관계를 이해하기 쉽도록 표현한 그림
    • 릴레이션 속성은 사각형으로, 속성 간의 함수 종속성은 화살표로 표기

스크린샷 2020-11-08 오후 8 49 40


  • 함수 종속 판단 유의사항

    • 일반적으로 기본키후보키는 릴레이션의 다른 모든 속성들을 함수적으로 결정한다.
    • 기본키후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자가 될 수 있다.

완전 함수 종속과 부분 함수 종속성

  • 완전 함수 종속(full functional dependency)

    • 특정 속성이 결정자인 둘 이상의 전체 속성 조합에는 함수 종속이면서 결정자의 어떤 일부 속성에도 함수 종속이 아닐 때
      • 결정자인 기본키에 속한 모든 속성 값을 통해서만기본키가 아닌 일반 속성을 결정할 수 있다.
      • 보통 함수 종속은 완전 함수 종속을 의미한다.
      • 결정자가 단일 속성이면 당연히 완전 함수 종속이다.
  • 부분 함수 종속(partial functional dependency)

    • 특정 속성이 결정자인 둘 이상의 전체 속성 조합에도 함수 종속이면서 결정자의 일부 속성에도 함수 종속일 때
      • 결정자인 기본키에 속한 일부 속성 값을 통해서도 기본키가 아닌 일반 속성을 결정할 수 있음

스크린샷 2020-11-16 오후 3 13 09

  • 학번, 과목번호: 두 개의 결정자에 의해서 결정되는 학점, 성별, 강의교수완전 함수 종속이라 할 수 있다.
  • 학번 하나의 결정자에 의해서 결정되는 성별부분 함수 종속이라고 할 수 있다.

3. 기본 정규형과 정규화 과정

  • 정규화(normalization)

    • 개념

      • 함수 종속성을 이용해 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해해서, 이상 현상이 발생하지 않는 올바른 릴레이션으로 만들어 가는 과정
        • 기본 목표 : 관련이 없는 함수 종속성은 별개의 릴레이션으로 표현
  • 주의 사항

    • 정규화를 통해 릴레이션은 무손실 분해(nonloss decomposition)되어야 한다.
    • 릴레이션이 의미상 동등한 릴레이션들로 분해되어야 하고, 분해로 인한 정보 손실이 발생하지 않아야 한다.

  • 정규형(NF: Normal Form)

    • 릴레이션이 정규화된 정도
    • 각 정규형마다 제약조건이 존재
      • 정규형의 차수가 높아질수록 요구되는 제약조건이 많아지고 엄격해짐
      • 제3정규형 이상의 정규형을 충족하면 충분한 정규화가 이루어졌다고 봄
      • 보통 제3정규형까지 정규화를 진행

제 1정규형(1NF: First Normal Form)

  • 릴레이션의 모든 속성이 더는 분해되지 않는 원자 값(atomic value)만 가지면 제 1정규형을 만족한다.
  • 정규화 대상인 릴레이션이 관계형 데이터 모델의 기본 원칙을 따르기만 한다면 당연히 제1정규형에 속한다.

스크린샷 2020-11-08 오후 9 14 20

당첨여부를 보면 속성의 값이 여러 개이기 때문에 제 1정규형을 만족하지 못한다.

스크린샷 2020-11-08 오후 9 18 37

하지만 위에서 말했던 것처럼 삽입이상, 갱신이상, 삭제이상이 발생한다.


  • 이상 현상의 발생 이유

    • 기본키인 { 고객아이디, 이벤트 번호 }에 완전 함수 종속되지 못하고 일부분인 고객아이디에 종속되는 등급과 할인율 속성이 존재하기 때문
  • 문제 해결 방법

    • 부분 함수 종속이 제거되도록 이벤트참여 릴레이션을 분해
      • 분해된 릴레이션들은 제 2정규형에 속하게 된다.

제 2정규형(2NF: First Normal Form)

  • 릴레이션이 제 1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제 2정규형을 만족한다.
  • 제 1정규형에 속하는 릴레이션이 제 2정규형을 만족하게 하려면?
    • 부분 함수 종속을 제거하고 모든 속성이 기본키에 완전 함수 종속되도록 분해

스크린샷 2020-11-08 오후 9 28 13

제 1정규형을 만족한 테이블에서 부분 함수 종속을 제거하여 제 2정규형을 만족시키게 분리하면 위와 같다.

스크린샷 2020-11-08 오후 9 29 28

하지만 위의 관계에서도 이행적 함수 종속 관계가 존재한다는 문제가 있다. 따라서 3차 정규형을 적용시켜야 한다.


제 3정규형(3NF: Thrid Normal Form)

  • 릴레이션이 제 2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제 3정규형을 만족한다.

  • 제 2정규형에 속하는 릴레이션이 제 3정규형을 만족하게 하려면?

    • 모든 속성이 기본키에 이행적 함수 종속이 되지 않도록 분해한다.

스크린샷 2020-11-08 오후 9 32 50

고객의 아이디가 등급에 따라서 할인율을 다르게 적용하는 이행적 함수 종속 관계가 존재한다.

스크린샷 2020-11-08 오후 9 35 17

스크린샷 2020-11-08 오후 9 35 52