정규화
- 이상 현상(삽입, 삭제, 갱신) 을 제거하기 위해 테이블을 분해하는 과정이다.
- 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다.
- 테이블을 분해하므로 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 |