데이터 베이스 정규화 ( Normalization )

        목적

  • 테이블 내의 중복된 데이터를 제거
  • 데이터 추가, 수정, 삭제 간에 발생하는 이상현상( Anoamly ) 를 최소화
  • 일반적으로 3 NF 단계의 정규화를 마치면 정규화된 테이블이라고 표현

 

 

이상현상 ? ( Anomaly )

데이터의 중복 등 정규화가 진행되지 않음에 따라 발생하는 부작용을 말한다.

 

  • 삽입 이상 ( Insertion Anomaly )

데이터를 삽입하는데 불필요한 속성까지 추가해야하는 경우를 말한다.

- 기본 키가 { Student_id , Course_id } 인 경우, 어떤 수업도 수강하지 않는 학생의 경우

   Course_id가 없는 현상이 발생한다.

-  기본 키가 Null 이 될 수는 없기 때문에, "미수강" 이라는 불필요한 속성을 추가해야하는 경우가 발생.

 

  • 갱신 이상 ( Update Anomaly ) 

데이터를 갱신한 후 일관성이 위반되는 경우

-  어떤 학생이 개명을 통해 Student_Name 이 바뀌었다고 할 때,

   해당 개명학생의 모든 튜플을 갱신해줘야만 한다.

   하지만, 이렇게 하지 않고 하나의 튜플만 갱신할 경우 발생하는 문제를 '갱신 이상' 이라고 한다.

 

  • 삭제 이상 ( Deletion Anomaly ) 

데이터를 삭제하는데 의도치 않은 항목까지 함께 삭제되는 경우

-  수강 취소를 위해 수강 정보를 삭제하려고 할 때,

   수강 정보와 학생 정보가 하나의 튜플에 같이 들어있다면, 

   수강 정보는 물론 학생의 정보 또한 삭제되어버린다. 

 -  위 처럼, 원하지 않는 데이터도 함께 삭제 되어버리는 현상을 '삭제 이상' 이라고 한다.

 

 

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

함수적 종속성이란, 테이블에 있는 두 개의 속성들 사이의 제약을 말한다.

테이블에 X , Y 필드가 있다고 했을 때, 

X 의 값이 Y에 속한 '하나의' 값에만 매핑이 되는 경우를 함수 종속적이다 라고 하며,

X -> Y 로 표현한다. 

이 때, X를 결정자, Y를 종속자 라고 한다.

 

 

완전 함수 종속 ( Full Functional Dependency ) 

기본키가 종속자이며, 기본키가 여러속성으로 구성이 되어있을 경우, 

기본키를 구성하는 모든 속성이 포함된 부분집합 또한 종속자일 경우

 

 

부분 함수 종속 ( Partial Functional Dependency )

릴레이션에서 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키를 구성하는

여러 속성들의 부분집합 중 일부분에만 종속될 경우.

 

위 테이블에서, 기본키는 { 고객 id  , 상품 id }  이며, '주문 상품' 의 경우,

상품 id만 알아도 식별이 가능하기 때문에, 주문 상품은 기본키에 부분 함수 종속 관계 이다.

 

'가격' 의 경우, 상품 id 에 부분 함수 종속 관계 라고 할 수 있지만, 

이 경우에는 기본키 외에도 '수량' 에도 종속이 되어있다.

이 경우에는 논리적으로 자연스럽지 않으며, 개선될 필요가 있다.

 

이행 함수 종속 (Transitive Functional Dependency )

X  Y  Z  3가지 부분집합을 가진 릴레이션에서 ,

X -> Y  이고, Y -> Z 일때,  X-> Z 가 성립이 되는 경우를 말한다.

( Y- > X가 아닐 경우 )

 

위 테이블을 보면, 

'가격' 은 { 고객 id , 상품 id -> 수량 -> 가격 } 이러한 관계라고 볼 수 있으며,

 { 고객 id , 상품 id } 에 이행적 종속 되어있다 라고 할 수 있다.

기본키인 상품 id와, 기본키가 아닌 수량이 있어야만 가격이 유효할 수 있다는 것이다.

이러한 관계 또한 논리적으로 부자연스럽기 때문에 

부분 함수 종속과 이행 함수 종속을 제거하여 테이블을 논리적이고

효율적이게 만드는 것을 정규화 라고 한다.

+ Recent posts