CS

[DB] 정규화 - 함수 종속성 및 정규형 (종속성 규칙, 제 N정규형)

왕방토 2022. 12. 15. 13:51
728x90

잘못 설계된 DB가 일으키는 이상현상

  • 삭제이상: 튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상
  • 삽입이상: 튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL 값을 입력해야 하는 현상
  • 수정이상: 튜플 수정 시 중복된 데이터일부만 수정되어 데이터의 불일치 문제가 일어나는 현상

-> 이상현상을 없애기 위해서 테이블의 정규화가 필요함


<함수 종속성> : 릴레이션(테이블) 의 속성 사이의 의존성이 있는 것

A -> B 와 같이 표기함

A는 B의 결정자(Determinant)이고, B는 A의 종속속성(dependent attribute) 이다.

A는 B를 결정(Determine)하며 B는 A에 종속된다(Dependent)

 

예시)

 

학생번호(primary key) -> 학생이름, 주소, 학과 를 결정함(종속관계)

이 예시에서 학생번호는 (학생이름, 주소, 학과) 의 결정자(Determinant)

 

!!종속하는 것처럼 보이지만 그러지 않은 예

학생이름 -> 학과

학생이 한명 있으면 그 학생이 가지고 있는 학과도 하나 이기 때문에 1:1 매칭으로 생각할 수 있지만

학생 이름이 중복인 경우가 있을 수 있기 때문에 종속관계가 아님

A -> B 가 되려면 A의 정보만을 가지고 B를 도출해 낼 수 있어야 함


<함수 종속성 다이어그램> : 함수 종속성을 나타내는 표기법

 

예) 위의 테이블로 만든 다이어그램 예시

복합속성: 복합 키를 나타내는 것

(학생번호 + 강좌이름) 이 primary key가 되므로 묶어서 그린 것

 

테이블(릴레이션) 분리하기

 -> 이상현상을 없애기 위해서는 기본키가 아닌 결정자를 없애줘야 함 (테이블 분리)

 -> 분리하는 경우에는 기본키가 아닌 결정자를 원래 테이블에 남겨놓아야 함 (테이블간의 관계 형성)

 


 

<함수 종속성 규칙>

X, Y, Z가 릴레이션 R에 포함된 속성의 집합이라고 할 때, 함수 종속성에 관한 다음과 같은 규칙이 성립함.

  • 부분집합 규칙

  •  증가 규칙

  • 이행 규칙

(삼단논법이랑 똑같다!)

 

이 세 규칙으로부터 도출된 새로운 세가지 규칙

 

  • 결합 규칙

  • 분해 규칙

  • 유사이행 규칙

 


<제 1정규형>: 릴레이션 R의 모든 속성 값이 원자값을 가짐

ex) A -> B,C / A -> B, A -> C

 

<제 2정규형>: 제 1정규형이면서 PK가 아닌 속성들이 모두 PK에 완전함수종속

 -> 복합키에 전체적으로 의존하지 않는 속성 제거

ex) (A+{B -> D}) -> C  / (A+B) -> C, B -> D

 

<제 3정규형>: 제 2정규형이면서 PK가 아닌 속성이 PK에 비이행적으로 종속함

-->기본키가 아닌 속성이 PK에 이행적으로 종속하는 것 없애기

ex) A(PK) -> B, A(PK) -> C, B -> C / A(PK) -> B, B -> C

와 같이 분리함으로써 B가 기본키가 됨

 

<BCNF>: 제 3정규형이면서 결정자가 PK가 아닌 함수적 종속을 제거함

-> 모든 결정자가 PK가 되도록 테이블을 분해

ex) (A, B) -> C , C -> B / A -> C, C -> B

와 같이 테이블을 분리함으로써 C도 PK가 됨

 

<무손실 분해>: 릴레이션 R을 릴레이션 R1과 R2로 분해할 때, R1 (join) R2 = R 이면 무손실 분해이다.

 

 

댓글수0