정규화

  • 이상 현상(삽입, 삭제, 갱신) 을 제거하기 위해 테이블을 분해하는 과정이다.
  • 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다.
  • 테이블을 분해하므로 JOIN이 늘어나고 성능이 느려질 수도 있다. 그래서 반정규화도 존재한다.

제1 정규화

- 속성의 원자성을 확보하고 원자값이 아닌 도메인을 분해해라.

 

제2 정규화

- 완전 함수 종속을 만족해라 = 부분 함수 종속을 제거해라

- 완전 함수 종속 : 기본키가 2개 이상으로 이루어진 경우, 기본키의 부분집합이 결정자가 되어선 안된다

 

제3 정규화

- 이행 함수 종속을 제거해라

ex) A->B (B는 A를 의존한다.)

A(PK) B C 컬럼을 가진 테이블에서

A->B, B->C, A->C 라면 기본키를 제외한 컬럼간 종속성이 있다.

 

BCNF

- 결정자이면서 후보키가 아닌 것을 제거해라 ( 결정자 후보 키가 아닌 함수 종속 제거 )

- 결정자 : A->B에서 A를 말한다. 

 

KEY

- 후보키 : 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합 (유일성, 최소성 만족)

- 기본키 : 후보키 중 하나

- 슈퍼키 : 유일성만 만족

'Language > SQL' 카테고리의 다른 글

sql JOIN(Inner, Outer, Cross, Self)  (0) 2023.09.06
SQL) sql, 서브쿼리 (23-06-02)  (0) 2023.07.13