728x90
반응형
SMALL

정규화(Normalization)의 정의

데이터베이스에서의 정규화(Normalization)란 관계형 데이터베이스 모델에서
데이터의 중복을 제거하여 삽입 , 갱신 , 삭제 이상현상을 방지하기 위해
무손실 분해를 하는 과정을 말한다.
테이블간에 데이터의 중복이 있는 경우 Insert, Update, Delete 할 때 이상현상 
즉 테이블간, 데이터간 정합성이 깨지는 이상현상이 발생을 한다.
이러한 이상현상을 방지하기 위해 테이블간에 같은 필드가 중복해서 저장되지
않도록 테이블을 분리하는데 이것을 정규화라고 한다.
단 테이블을 분리하면서 데이터의 손실이 가해지면 안되는데 이것을 '무손실분해'
라고 한다.


정규화의 단계

단계 설명
1차 정규화 모든 속성이 원자값을 가지도록 분해
2차 청규화 부분함수 종속성 제거
3차 정규화 이행함수 종속성 제거
BCNF 결정자 함수 종속성 제거
4차 정규화 다중값 종속성 제거
5차 정규화 후보키를 통한 Join 종속성 제거



1차 정규화

릴레이션 R의 모든 애트리뷰트가 원자값만을 갖는 경우 제1정규화를 만족한다.


2차 정규화 (부분함수 종속성 제거)

• 기본키가 모든 애트리뷰트의 결정자가 되는 완전함수종속성을 만족하는 경우
• 기본기카 2개 인 경우 그 중 하나만 가지고도 다른 애트리뷰트와 완전함수종속이 
   되는 경우가 있다면 그 릴레이션은 제2정규화를 만족하지 못한다.

 기본키중에 하나인 <학번>만 가지고도 [학과이름]과 [학과전화번호]를 알수 있다.
  (함수종속) 
•  따라서 2개의 테이블로 분리해야 한다.


3차 정규화

• 키가 아닌 애트리뷰트에 다른 애트리뷰트가 함수종속되는 경우가 있다면 그 릴레이션은
  제3정규형을 만족하지 못한다. (이행종속성) 

  • 기본키가 아닌 [학과이름]만 알아도 기본키가 아닌 [학과전화번호]를 알수 있다. 
    즉 기본키가 아닌 애트리뷰트들간에 함수종속이 있는 경우


BCNF 

• 키가 아닌 애트리뷰트가 기본키에 속하는 어떤 애트리뷰트를 결정하는 경우 
   BCNF를 만족하지 못한다.
• 결국 BCNF를 만족하려면 모든 결정자를 후보키로 만들어야 한다.
  즉 각 결정자를 키로 하는 테이블로 각각 분할해야 한다.
• 3NF이면서 BCNF가 아닌 경우의 조건
    - 복수의 후보키를 가지고 있어야 한다.
    - 후보키들이 복수의 애트리뷰트로 구성되어 있어아 한다.
    - 후보키들이 서로 중첩된다.

기본키가 아닌 [C] 컬럼만으로도 기본키중 하나인  애트리뷰트를 알수 있는 경우


문) 렐레이션 R (A,B,C) 에서 다음과 같은 함수적종속성이 성립할 때, 3정규형을 
    만족하도록 릴레이션을 분할하라.. (키는 A이다)
               A -> B   , A -> C  , C->B

답) A->C , C->B 로 인해 키가 아닌 애트리뷰트(B,C)간에 함수종속성이 있는 
    이행함수가 존재하므로  2정규형까지 만족한 상태임
    이행함수가 존재하는 경우 그 다리역할을 하는 필드를 기준으로 분리하면 된다
    따라서   (A,C) , (C,B) 로 분리한다


정규화의 장점

항목 설명
이상현상 제거 중복에 따른 이상현상을 방지하여 데이터의 정합성유지
저장공간 효율화 아무래도 데이터의 중복을 제거하므로 저장공간을
덜 쓴다.
확장성 확보 데이터 신규 발생시 추가가 용이하다.


정규화의 단점

항목 해결책
조회쿼리 수행시 테이블 분리로 인한 Join 의 증가로 인해 검색 속도 저하될수 있음 적절하게 필드의 중복을 통해 Join 수를
감소시킬 수 있다.
  -> 반정규화 (De-Normalization)

 

728x90
반응형
LIST

+ Recent posts