본문 바로가기
Computer Science/DataBase

[데이터베이스] 7장 릴레이션 정규화

by na1-4an 2023. 12. 12.

7-1 정규화 개요

1. 릴레이션 정규화

  • db설계 제대로 안하면 갱신 이상을 유발함.
  • 정규화는 주어진 릴레이션을 분해함으로써 중복과 세가지 갱신 이상을 최소화함.

 

2. 갱신 이상과 중복

  • 수정 이상: 데이터 일부만 수정해 데이터 불일치 발생.
  • 삽입 이상: 불필요한 정보를 함께 저장 안하면 어떤 정보를 저장하는 것이 불가능
  • 삭제 이상: 유용한 정보를 함께 삭제 안하면 삭제가 불가능.
  • 중복

-> 릴레이션 분해로 해결하자~

 

7-2 함수적 종속성

1. 함수적 종속성

  • 만약 애트리뷰트 A가 애트리뷰트 B의 결정자이면 B가 A에게 함수적으로 종속한다
  • 정규화 이론의 핵심
  • 제2정규형부터 BCNF까지 적용됨.
  • 완전 함수적 종속성:
  • 애트리뷰트 B가 애트리뷰트 A에 함수적으로 종속하면서
  • 애트리뷰트 A의 어떤 진부분집합에도 함수적으로 종속하지 않으면
  • B가 A에게 완전하게 함수적으로 종속.

2. 결정자

  • 다른 애트리뷰트 값을 고유하게 결정하는 애트리뷰트

 

3. 이행적 함수적 종속

  • A가 B를 결정하고, B가 C를 결정한다.
  • 아래 그림에서  fd2가 이행적 함수 종속성이다.

 

7-3 릴레이션의 분해

1. 릴레이션 분해

  • 하나의 릴레이션을 두 개 이상으로 나누는 것
  • 중복 감소
  • 갱신 이상 감소
  • 그러나 조인을 필요로하는 질의가 생길 수 있고
  • 재구성을 못할 수 있음

 

2. 무손실 분해

  • 정보의 손실은 정보가 원래 릴레이션에 들어있는 정보보다 적거나 많은 것을 모두 포함함.
  • 반드시 무손실 분해를 해야함.

 

7-4 제1정규형, 제2정규형, 제3정규형, BCNF 

1. 제1정규형

: 릴레이션  R의 모든 애트리뷰트가 원자값만 갖는다.

  • 릴레이션의 모든 애트리뷰트에 반복 그룹이 안 나타나면 제1정규형 만족.
  • 만약 반복그룹이 나타났으면
  • 해결법1: 애트리뷰트에 나타나는 집합에 속한 각 값마다 하나의 투플로 표현
  • 해결법2: 두 릴레이션으로 분해

 

  • 제1정규형에 존재하는 갱신이상. 그림 7.16은 제1정규형을 만족하는 릴레이션이다.
  • 수정이상 - 학과 전화번호를 수정하고, 해당학과의 모든 학과 전화번호를 수정하는 것이 아니면 일관성 유지 불가
  • 삽입이상 - 한명의 학생이라도 어떤 학과에 소속되지 않으면 투플 삽입 불가. 기본키에 널값 못 들어감.
  • 삭제이상 - 어떤학과에 소속된 마지막 학생 투플을 삭제하면 소속한 학과에 관한 정보도 삭제됨.
  • 이러한 갱신 이상이 생기는 이유:
  • 부분 함수적 종속성이 존재하기때문!
  • 제2정규형에서 계속..

 

2. 제2정규형

: 제1정규형을 만족하면서 모든 애트리뷰트들이 기본키에 완전하게 함수적으로 종속하는 것.

  • 이는 기본키가 2개 이상일 때부터 고려할 필요가 있음

  • 제2정규형에 존재하는 갱신이상.
  • 수정이상 - 학과 전화번호를 수정하고, 해당학과의 모든 학과 전화번호를 수정하는 것이 아니면 일관성 유지 불가
  • 삽입이상 - 신설학과이어서 학생이 없으면 해당 학과 정보를 입력할 수 없음.
  • 삭제이상 - 어떤학과에 소속된 마지막 학생 투플을 삭제하면 소속한 학과에 관한 정보도 삭제됨.
  • 이러한 갱신이상이 생기는 이유:
  • 학생릴레이션에 이행적 종속성이 존재하기 때문!
  • 제3정규형에서 계속...

 

3. 제3정규형

: 제2정규형을 만족하면서, 키가 아닌 모든 애트리뷰트가 릴레이션의 기본 키에 이행적으로 종속하지 않는  것.

  • 제3정규형에 존재하는 갱신이상
  • 수정이상 - 강사가 바뀌었을때 해당 과목을 듣는 학생들의 모든 강사를 바꾸어줘야함.
  • 삽입이상 - 과목이 신설되어서 아직 아무도 수강하고 있지 않으면 정보 입력 불가..
  • 삭제이상 - 어떤 과목을 듣는 학생이 한명뿐인데 이 투플을 지우면 강사 정보도 사라짐.
  • 이러한 갱신이상이 생기는 이유:
  • 수강릴레이션에서 키가 아닌 애트리뷰트가 다른 애트리뷰트를 결정하기 때문.
  • 여기서 후보키는 (학번, 과목) (학번, 강사)

 

4. BCNF

:  제3정규형을 만족하고, 모든 결정자가 후보키이어야함.

  • 위에서 강사는 후보키도 아니면서 과목 애트리뷰트를 결정함..
  • 하나의 후보키만 가진 릴레이션이 제2정규형을 만족하면 BCNF도 만족함.
  • 키가 아니면서 결정자 역할을 하는 애트리뷰트(강사)와 그 결정자에 함수적으로 종속하는 애트리뷰트(과목)를 하나의 테이블에 넣음.
  • 이 릴레이션에서 기본키는 결정자가 됨.
  • 기존 릴레이션에서는 결정자를 남겨 기본키의 구성요소가 되도록함. 이는 새로운 릴레이션에 대한 외래키 역할도 함.

5. 정규화 정리  

 

7-5 역정규화

1. 역정규화

  • 정규화가 데이터베이스 설계의 중요한 요소인건 맞지만 
  • 성능상의 관점에서만 보면 높은 정규형이 최적인 것은 아님.
  • 분해가 많이되면 조인의 필요성이 증가함.
  • 역정규화는 빈번하게 수행되는 질의들의 수행 속도를 높이기 위해 이미 분해된 릴레이션들을 합치는 과