- 데이터의 일관성
- 최소한의 데이터 중복
- 최대한의 데이터 유연성
- 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법
- 정규화 수행시, 비즈니스 변화에도 데이터 모델의 변경을 최소화할 수 있다
- 실질적으로 제3정규화까지 수행
정규화 절차 | 설명 |
---|---|
제1정규화 | - 속성(Attribute)의 원자성을 확보 - 기본키(Primary key) 설정 |
제2정규화 | - 기본키가 속성 2개 이상의 묶음일때만 실행 - 부분 함수 종속성 제거 |
제3정규화 | - 기본키를 제외한 속성간의 종속성 제거 - 이행 함수 종속성 제거 |
BCNF | - 기본키 제외하고 후보키가 있는 경우 실행 - 후보키가 기본키를 종속시키면 분해 |
제4정규화 | - 여러 속성이 하나의 속성을 종속시키는 경우 실행 - 분해하여 다중 값 종속성 제거 |
제5정규화 | - 조인에 의해 종속성이 발생되는 경우 분해 |
정규화는 함수적 종속성을 근거로 한다.
X -> Y일때 Y는 X에 함수적으로 종속한다. (X가 변화하면 Y도 변화한다)
-
- 데이터를 구분할 수있는 기본키 속성(들)을 설정한다
- ex) 계좌 테이블의 [계좌번호, 회원ID] 기본키
-
- 부분 함수 종속성
- 기본키가 아닌 다른 속성에 종속되어있다. (그 속성이 바뀌면 값이 따라 바뀜)
- 기본키가 여러 속성으로 구성되어 있을 기본키 속성 일부에 종속되어있다
- 부분 함수 종속성 분해 ex) 종속되어있는 속성을 분해해 새 테이블이 도출된다
- 부분 함수 종속성
-
- 이행 함수 종속성
- 기본키를 제외하고 칼럼 간에 종속성이 발생하는 것
- ex) [계좌] 테이블에 기본키[계좌번호, 회원아이디]를 제외하고 [관리점], [관리점 코드] 속성이 있다. -> 종속성 발생 (분해한다!)
- 이행 함수 종속성
-
- 복수의 후보키가 있고, 후보키들이 복합 속성이어야 하며, 서로 중첩되어야 한다
- ex) [수강] 테이블에 기본키[학생번호, 강의명] 과 속성[교수]가 있다
- [학생번호, 강의명]은 결정자이다
- [교수] 역시 결정자이다. 하지만 후보키는 아니다
- [학생번호, 강의명] 속성을 가진 테이블과 새 [강의명, 교수] 테이블을 분리한다.
- 테이블을 분해해서 데이터 중복을 제거하고 데이터 유연성을 높인다
- 데이터 조회 SELECT 에 JOIN문을 유발한다 . CPU와 메모리 사용이 많다
- 조인의 부하로 인한 성능 저하 문제점을 해결하기 위해 반정규화가 등장했다
- 데이터 베이스의 성능 향상을 위하여 데이터 중복 허용, 조인을 줄이는 방법
- 조회(SELECT) 속도 향상, 하지만 데이터 모델 유연성 하락
- 정규화로 수행 속도가 느려지는 경우
- 다량의 범위를 자주 처리해야하는 경우
- 특정 범위의 데이터만 자주 처리하는 경우
- 요약/집계 정보가 자주 요구되는 경우
- 계산된 컬럼 추가
- 테이블 수직 분할
- 하나의 테이블을 두개 이상으로 분할. 칼럼을 두군데로 분할
- 테이블 수평 분할
- 하나의 테이블에 있는 값(row)을 기준으로 그 값의 위아래로 분할
- 테이블 병합
- 1:1 관계 테이블을 하나의 테이블로 병합
- 1:N 관계 테이블을 병합하여도 되지만 많은 양의 데이터 중복이 발생한다
- 슈퍼타입:서브타입 관계가 발생할 때 테이블을 통합하여 성능을 향상시킨다