정규화

박민주·2024년 1월 16일
0

[cs]-DB

목록 보기
6/8
  • 정규화의 필요성과 이상 현상의 의미를 이해한다
  • 정규화를 수행하기 위해 함수 종속성의 개념을 이해한다
  • 정규형의 유형과 관계를 이해하고, 실제 예를 통해 정교화 과정 연습해보기

정규화의 개념과 이상현상

이상(anomaly)현상

  • 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제, 연상을 수행알 때 발생할 수 있는 부작용
  • 이상 현상의 종류
    - 삽입 이상 : 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
    - 갱신 이상 : 중복 튜플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
    - 삭제 이상 : 튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제

삽입이상

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

갱신이상(update anomaly)

  • 중복 튜플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
  • 갱신 이상이 발생하는 예
  • 아이디가 "apple"인 고객의 등급이 "gold"에서 "vip"로 변경되었는데, 일부 튜플에 대해서만 등급이 수정된다면 "apple" 고객이 서로 다른 등급을 가지는 모순이 발생

삭제이상(deletion anomaly)

  • 튜플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제
  • 삭제 이상이 발생하는 예
  • 아이디가 "orange"인 고객이 이벤트 참여를 취소해 관련 튜플을 삭제하게 되면 이벤트 참여와 관련이 없는 고객아이디, 고객이름, 등급 데이터까지 손실됨

정규화

  • 이상현상이 발생하지 않도록, 릴레이션을 관련 있는 속성들로만 구성하기 위해 릴레이션을 분해(decomposition)하는 과정
  • 함수성 종속성을 판단하여 정규화를 수행함

함수적 종속성(FD; Functional Dependency)

  • 속성들간의 관련성
  • 함수종속성을 이용하여, 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해하여 이상현상이 발생하지 않는 바람직한 릴레이션으로 만들어 나가는 과정이 정규화

함수 종속

함수 종속

  • "X가 Y를 함수적으로 결정한다"
    - 릴레이션내의 모든 튜플을 대상으로 하나의 X값에 대한 Y값이 항상 하나임
    - X와 Y는 하나의 릴레이션을 구성하는 속성들의 부분집합
    - "Y가 X에 함수적으로 종속되어 있다"와 같은 의미
    - X -> Y로 표현(X는 결정자 , Y는 종속자)

함수 종속 관계 판단 예 (1)

함수종속 다이어그램 : 함수 종속관계를 도식화하여 표현한 것

고객아이디가 고객이름과 등급을 결정한다. 고객이름은 등급을 결정하지 않는다.

함수 종속 관계 판단 시 유의 사항

  • 속성 자체의 특성과 의미를 기반으로 함수 종속성을 판단해야함
    - 속성 값은 계속 변할 수 있으므로 현제 릴레이션에 포함된 속성 값만으로 판단하면 안됨
  • 일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성들을 함수적으로 결정함
  • 기본키나 후보키가 아니더라도 다른 속성 값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자가 될 수 있음

함수 종속 관계 판단 예 (2)

  • 고객아이디가 고객이름을 결정하고 , 고객아이디와 이벤트번호의 조합으로 당첨여부를 결정한다.

완전함수 종속(FFD; Full Functional Dependency)

  • 릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만, 속성 집합X의 전체가 아닌 일부분에는 종속되지 않음을 의미
  • 일반적으로 함수 종속은 완전 함수 종속을 의미함

부분함수 종속(PFD; Partial Functional Dependency)

  • 릴레이션에서 속성 집합 Y가 속성 집합 X에 전체적으로 아닌 부분적으로 종속되었음을의미

이행적 함수 종속(transitive FD)

  • 릴레이션을 구성하는 세 개의 속성 집합 X,Y,Z에 대해 함수 종속 관계 X->Y와 Y->Z가 존재하면 논리적으로 X->Z가 성립되는데, 이것을 Z가 X에 이행적으로 함수 종속되었다고 함.

고려할 필요가 없는 함수 종속 관계

  • 결정자와 종속자가 같거나, 결정자가 종속자를 포함하는 것처럼 당연한 함수 종속 관계는 고려하지 않음

기본 정규형과 정규화 과정

정규화(normalization)

  • 함수 종속성을 이용해 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해해서 이상현상이 발생하지 않는 바람직한 릴레이션으로 만들어 가는 과정
  • 정규화를 통해 릴레이션은 무손실 분해 되어야함.
    - 릴레이션은 의미적으로 동등한 릴레이션들로 분해되어야 하고 분해로 인한 정보의 손실이 발생하지 않아야함
    - 분해된 릴레이션들을 자연 조인 하면 분해전의 릴레이션으로 복원 가능해야함

정규형(NF; Normal Form)

  • 릴레이션이 정규화된 정도. 6가지로 구분 될 수 있다.

  • 각 정규형마다 제약조건이 존재
    - 정규형의 차수가 높아질수록 요구되는 제약조건이 엄격해지고 많아진다.
    - 정규형의 차수가 높아질수록 데이터 중복이 줄어 이상현상이 없는 바람직한 릴레이션이 됨

  • 릴레이션의 특성을 고려하여 적합한 정규형을 선택

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

  • 릴레이션의 모든 속성이 더는 분해되지 않는 원자 값만 가지면 제1정규형을 만족함
  • 제1정규형을 만족해야 관계 데이터베이스의 릴레이션이 될 자격이 있음.

제 1정규형을 만족하지 않는 릴레이션 (다중 값)

제 1정규형을 만족하는 릴레이션

제 1정규형을 만족하지만 데이터의 중복으로 인한 이상 현상이 발생함

이상현상의 발생이유

  • 이상현상의 발생이유
    기본키인 {고객아이디, 이벤트번호}에 완전 함수 종속되지 못하고 일부분인 고객아이디에 종속되는 등급과 할인율 속성이 존재하기 때문

문제해결방법은? 부분 함수 종속을 제거도되록 릴레이션을 분해

제 2정규형(2NF)

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

제 1정규형을 만족하지만 제 2정규형은 만족하지 않는 릴레이션

제 2정규형에 만족하도록 분해된 고객, 이벤트참여 릴레이션

제 2정규형을 만족하지만 이상현상이 발생함

이행적 함수 종속이 존재하기 때문.

  • gold등급의 할인율을 조정하고자 할 때 일부 튜플만 수정된다면 갱신 이상이 생김
  • banana고객이 탈퇴를 하면서 vip등급의 할인율이 손실이 되면서 삭제 이상이 생김
  • bronze라는 할인율 가진 고객아이디가 없다면 고객아이디가 null값이 되면서 삽입이상이 생김

문제해결방법? 이행적 함수 종속이 제거되도록 고객 릴레이션을 분해

제 3정규형(3NF)

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

고객릴레이션과 고객등급 릴레이션의 함수 종속 다이어그램

제 3정규형을 만족하도록 분해된 릴레이션

정규화 예제

1. 위의 릴레이션에서 발생가능한 삽입 이상, 갱신 이상, 삭제 이상을 예를 들어 설명하시오.

  • 삽입 이상 : 기본키는 학번과 과목번호이다. 수강신청을 하지않은 학생의 데이터는 삽입할 수 없다.
  • 갱신 이상 : 한 명의 학생이 여러과목을 수강 했을 때, 동일한 학생의 대해서 학번에 종속된 속성들이 중복되어 튜플에 저장된다. 이 경우 지도교수가 변경될 경우 모두 변경되어야 하는데 일부는 갱신이 안된경우 동일 학생의 지도교수가 다른 갱신이상이 생긴다.
  • 삭제 이상 : 한 과목만 수강신청한 학생이 있다면, 이 학생이 수강취소를 하게 된다면 그 과목의 대한 데이터도 삭제되는 삭제이상이 발생하게 된다.

2. 모든 릴레이션이 제 2정규형을 만족하도록 분해하고, 각 릴레이션의 기본키를 표시하시오

  • 제2 정규형의 경우 부분함수 종속이 이루어지면 안된다.
  • 세가지 릴레이션으로 분해 할 수 있다.

3. 제 2정규형의 릴레이션이 제3정규형을 만족하도록 분해하고, 각 릴레이션의 기본키를 표시하시오

  • 이행적 함수 종속이 없어야한다.
profile
개발자 되고싶다..

0개의 댓글