가자공부하러!

데이터베이스(6) - 정규화(이상, 함수적 종속, 정규화) 본문

공부/정보처리기사(실기)

데이터베이스(6) - 정규화(이상, 함수적 종속, 정규화)

오피스엑소더스 2019. 5. 31. 09:46


1. 정규화 - 이상(Anomaly)

2. 정규화 - 함수적 종속

3. 정규화




* 함수적 종속

 : A가 B의 결정자이면, B는 A에 함수적 종속이다. 

** 완전 함수적 종속

 : 결정자의 부분집합에는 종속되지 않는 경우




1. 정규화 - 이상(Anomaly)


1. 이상의 개념

  > 이상(Anomaly)이란?

- 테이블에서 일부 속성들의 종속으로 인해 데이터의 중복이 발생하고, 이 중복으로 인해 테이블 조작 시 문제가 발생하는 현상을 의미

  > 이상의 종류 : 삽입 이상, 삭제 이상, 갱신 이상

  > 예시 테이블


2. 삽입 이상(Insertion Anomaly)

  > 삽입 이상은 테이블에 데이터를 삽입할 때 의도와는 상관없이 원하지 않은 값들 때문에 삽입할 수 없게 되는 현상

  > 예시

- <수강>테이블에서 학번이 "600"인 학생의 학년이 "2"라는 사실만을 삽입하고자 하는 경우

ㄴ 삽입 이상 발생

ㄴ <수강>테이블의 기본키는 학번과 과목번호이기 때문에 반드시 과목번호가 있어야 한다. 즉, 데이터가 발생되는 시점에는 과목번호가 필요 없지만 <수강>테이블에 기록하고자 하는 시점에 과목번호가 없으므로 등록할 수 없는 경우가 발생한다.


3. 삭제 이상(Deletion Anomaly)

  > 삭제 이상은 테이블에서 한 튜플을 삭제할 때 연쇄 삭제가 발생하는 현상이다.

- 의도와는 상관없는 값들도 함께 삭제되는 연쇄삭제 발생

  > 예시

-<수강>테이블에서 학번이 "200"인 학생이 과목번호 "C123"의 등록을 취소하고자 하는 경우 

ㄴ 삭제 이상 발생

ㄴ 학번이 "200"인 학생의 과목번호가 "C123"인 과목을 취소하고자 그 학생의 튜플을 삭제하면, 학년 정보까지 같이 삭제된다. 과목만을 취소하고자 했지만 유지되어야 할 학년 정보까지 삭제되기 때문에 정보 손실이 발생한다.


4. 갱신 이상(Update Anomaly)

  > 테이블에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 불일치성이 생기는 현상

  > 예시

-<수강>테이블에서 학번이 "400"인 학생의 학년을 "4"에서 "3"으로 변경하고자 하는 경우 

ㄴ 갱신 이상 발생

ㄴ 학번이 "400"인 모든 튜플의 학년 값을 갱신해야 하는데 실수로 일부 튜플만 갱신하게 되면 학번 "400"인 학생의 학년은 "3"과 "4", 즉 2가지 값을 가지게 되어 정보에 불일치성이 생기게 된다.



2. 정규화 - 함수적 종속


1. 함수적 종속(Functional Dependency)의 개념

  > 어떤 테이블 R에서 X와 Y를 각각 R의 속성 집합의 부분 집합이라 하자?

- 속성 X의 값 각각에 대해 시간에 관계 없이 항상 속성 Y의 값이 오직 하나만 연관되어 있을 때,

ㄴ Y는 X에 함수적 종속이다

ㄴ X가 Y를 함수적으로 결정한다

ㄴ X → Y

  > 함수적 종속은 데이터의 의미를 표현하는 것으로, 현실 세계를 표현하는 제약 조건이 되는 동시에 DB에서 항상 유지되어야 할 조건이다.

  > 예시테이블

  > <학생> 테이블에서 이름, 학년, 학과는 각각 학번 속성에 함수적 종속이다.

- 표기방법1 : 학번 → 이름, 학번 → 학년, 학번 → 학과

- 표기방법2 : 학번 → 이름, 학년, 학과

  > X → Y의 관계를 갖는 속성 X와 Y에서 X를 결정자(Determinant)라 하고 Y를 종속자(Dependent)라고 한다.

- 예) 학번 → 이름 에서는 학번이 결정자이고 이름이 종속자이다.


  * 종속이라는게 이해가 안되는데요...

- 속성에 함수적 종속적이다 == 결정자가 결정되면 종속자는 항상 결정자에 의존적이다

- 뭔말이여..

- 얘를 쟤값으로 구분할 수 있으면 쟤는 결정자 얘는 종속자 뭐 이런..?


2. 함수적 종속 다이어그램

  > 한 테이블에 존재하는 속성들 간의 복잡한 함수적 종속 관계를 보기 쉽게 표현한 그림

  > 예시테이블

  > <수강> 테이블에서 존재하는 함수적 종속은?

- 학번, 과목번호 → 성적

- 학번 → 학년

  > 함수적 종속 다이어그램으로 표현하면?

- 성적은 (학번, 과목번호)에 완전 함수적 종속이다.

ㄴ 완전 함수적 종속(Full Functional Dependency) : 어떤 테이블R에서 속성Y가 다른 속성 집합 X 전체에 대해 함수적 종속이면서 속성 집합 X의 어떠한 진부분 집합 Z에도 함수적 종속이 아닐 때, 속성 Y는 속성집합 X에 대해 완전 함수적 종속이라 한다.

ㄴ 얘만 함수적종속 다른애는 함수적 종속X

ㄴ 성적은 학번과 과목번호에 의해서만 결정되므로 성적은 (학번, 과목번호)에 완전 함수적 종속


- 학년은 (학번, 과목번호)에 부분 함수적 종속이다.

ㄴ 부분 함수적 종속(Partial Functional Dependency) : 어떤 테이블 R에서 속성Y가 다른 속성 집합 X 전체에 대해 함수적 종속이면서 속성 집합 X의 진부분 집합에 대해 함수적 종속일 때, 속성 Y는 속성 집합 X에 부분 함수적 종속이라 한다.

ㄴ 학년은 과목번호와 관계 없이 학번이 같으면 항상 같은 학년값을 가지므로 학년은 부분 함수적 종속

ㄴ 기본키(학번, 과목번호)의 일부인 학번에 의해서만 학년이 결정되므로

   

3. 정규화


1. 정규화(Normalization)의 개념

  > 정규화는 테이블의 속성들이 상호 종속적인 관계를 같는 특성을 이용하여 테이블을 무손실 분해 하는 과정

  > 목적 : 가능한 한 중복을 제거하여 삽입, 삭제, 갱신 이상의 발생 가능성을 줄이는 것

  > 제 1정규형 부터 제 5정규형 까지 순서대로 정규화의 정도가 높아진다


2. 정규화 과정

  > 예시테이블(1NF~3NF)


  > 제 1정규형

- 테이블 R에 속한 모든 속성의 도메인이 원자값으로만 되어 있는 정규형

- 테이블의 모든 속성 값이 원자 값으로만 되어 있는 정규형

- <주문목록>의 경우, 하나의 제품에 대해 여러 개의 주문 관련 정보가 발생하고 있으므로 제 1정규형이 아니다.

- 제 1정규형으로 정규화

- 원자값이 아니였던 (주문번호, 고객번호, 주소, 주문수량)을 원자로 분리

- 1차 정규화 과정으로 생성된 <제품주문> 테이블의 기본키는 (주문번호, 제품번호)이고, 다음과 같은 함수적 종속이 존재한다.

주문번호, 제품번호 → 고객번호, 주소, 주문수량

  주문번호 → 고객번호, 주소

  고객번호 → 주소


  > 제 2정규형

- 특징

ㄴ 제 1정규형 조건을 만족한다. (도메인이 원자값)

ㄴ 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속이다. (부분적 함수 종속 제거)

- <제품주문>의 경우,

ㄴ 기본키 (주문번호, 제품번호)에 완전 함수적 종속이 되지 않는 속성이 존재한다

ㄴ 고객번호와 주소는 주문번호만으로도 결정될 수 있다(완전 함수적 종속 아님)

ㄴ 주문번호 A345는 2개의 동일한 고객번호 "100"과 연결된다.

ㄴ 주문수량은 기본키에 대해 완전 함수적 종속(주문번호 또는 제품번호 하나로만 구분할 수 없다)

ㄴ 제품번호 1007은 서로 다른 3개의 주문수량과 연결된다.

- 제 2정규형으로 정규화


  > 제 3정규형

- 특징

ㄴ 제 1,2정규형 조건을 만족한다. (도메인이 원자값, 부분적 함수 종속 없음)

ㄴ 기본키가 아닌 모든 속성이 기본키에 대헤 이행적 함수적 종속을 만족하지 않는다

ㄴ 이행적 함수적 종속 : A → B이고, B → C일 때 A → C를 만족하는 경우

- <주문> 테이블에서 이행적 함수적 종속

ㄴ 고객번호가 주문번호에 함수적 종속이다. (주문번호 → 고객번호)

ㄴ 주소가 고객번호에 함수적 종속이다. (고객번호 → 주소)

ㄴ 주문번호가 주소에 함수적 종속이다.

- 제 3정규형으로 정규화

ㄴ 이행적 함수적 종속(주문번호 → 주소)을 제거하여 무손실 분해



  > 예시 테이블(BCNF)

  


  > BCNF

- 특징 : 모든 결정자가 후보키

ㄴ 제 3정규형에 후보키가 여러 개 존재하면서 후보키들이 서로 중첩되어 나타나는 경우에 적용 가능

- 예시

ㄴ <수강_교수> 테이블(제 3정규형)은 함수적 종속을 만족한다.

ㄴ 함수적 종속 : (학번, 과목명) → 담당교수, (학번, 담당교수) → 과목명, 담당교수 → 과목명

ㄴ 후보키 : (학번, 과목명), (학번, 담당교수)

ㄴ 담당교수는 결정자에 포함되지만 후보키가 아니다

- 정규화

ㄴ 결정자이지만 후보키가 아닌 '담당교수'결정자와 결정자에 종속된 종속자를 새로운 테이블로 분리


4. 제 4정규형

  > 테이블 R에 다중 값 종속 (A →→ B)이 존재할 경우 R으ㅢ 모든 속성이 A에 함수적 종속관계를 만족

  > 다중 값 종속(MVD; Multi Valued Dependency) : 

- A, B, C 세 개의 속성을 가진 테이블 R

- B값의 집합이 A값에만 종속되고 C값에는 무관한 경우

- A →→ B


5. 제 5정규형

  > 테이블 R의 모든 조인 종속이 R의 후보키를 통해서만 성립

  > 조인 종속(JD; Join Dependency)

- 테이블 R의 어떤 속성에 대한 부분집합 X, Y, ... 가 있을 때, 테이블 R이 자신의 프로젝션 X, Y, ... 를 모두 조인한 결과와 동일한 경우

ㄴ R은 조인 종속 JD(X, Y, ... )를 만족한다.


6. 비정규화(Denormalization, 역정규화)

  > 정규화로 인해 여러 개로 분해된 릴레이션들에서 원하는 정보를 얻기 위해서는 조인을 사용하여 다시 연결해야 한다.

  > 지나치게 자주 조인을 사용하면 응답속도가 떨어진다.

  > 성능 향상을 위해 다시 테이블을 합치는 경우를 비정규화 또는 역정규화라고 한다.








맨 위로












Comments