[sql] 데이터 정규화와 반정규화(1) - 정규화

728x90

1. 정규화

- 정규화는 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며, 데이터를 분해하는 과정

- 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법

- 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높인다.

- 정규화를 수행하면 비즈니스에 변화가 발생하여도 데이터 모델의 변경을 최소화 할 수 있다.

- 정규화는 제 1정규화 부터 제 5정규화 까지 있지만 실질적으로는 제 3 정규화까지만 수행한다.

- 테이블을 분해하기 때문에 join을 수행하여 하나의 합집합으로 만들 수 있다.

- 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다. 

- *이상현상이 발생하는 문제를 해결할 수 있다.

 

  * 이상현상(Anoomaly)

 하나의 테이블로 합쳐진 모델에서 새로운 데이터를 추가할 때 임의의 값을 추가해야만 하는 경우를 의미한다. 예를들어 직원정보 테이블이 이름,전화번호, 주소, 부서명이 하나의 테이블로 이루어져있으면 새로운 부서를 입력하기 위해서는 이름 전화번호 주소 등을 임의로 입력해야하는 문제를 의미한다.

 

1) 정규화  절차

제1 정규화 제2 정규화 제3 정규화 BCNF 제4 정규화 제5 정규화
-속성 원자성확보
-기본키설정
- 부분함수 종속성을 분해한다. - 이행함수 종속성을 제거한다. - 기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해한다. 여러 컬럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 종속성을 제거한다. 조인에 의해 종속성이 발생하는 경우 분해한다.

2) 제 1정규화

- 함수적 종속성을 근거로 한다. 함수적 종속성이란 X->Y이면 y는 x에 함수적으로 종속된다고 말한다.

- 함수적 종속성은 X가 변화하면 Y도 변화하는지 확인한다. 예를들어 회원 ID가 변화하면 이름도 변경될 것이다. 이런 경우 회원ID가 기본키가 되고, 회원ID가 이름을 함수적으로 종속한다고 한다.

-기본키를 잡는 것이 제1 정규화이다.

 

3) 제 2 정규화

- 부분함수 종속성이란, 기본키가 2개 이상의 컬럼으로 이루어진 경우에만 발생한다.

- 기본키가 하나의 컬럼으로 이루어지면 제 2 정규화는 생략한다.

 

4) 제 3정규화

- 이행함수 종속성을 제거한다. 이행함수 종속성이란 기본키를 제외하고 컬럼 간에 종속성이 발생하는 것이다.

- 제 3정규화는 제 1정규화와 제 2정규화를 수행한 다음에 해야한다.

 

5) BCNF(Boyce-Codd Normal Form)

- 복수의 후보키가 있고, 후보키들이 복합 속성이어야 하며, 서로 중첩되어야 한다.

- 기본키가 후보키를 함수적으로 종속하고 있을 때 후보키가 함수적으로 종속하는 경우 분해가 일어난다.

 

6) 정규화의 문제점

- 데이터 조회(select) 시 조인을 유발하기 때문에 CPU와 메모리를 많이 사용한다.

- 정규화의 문제점을 해결하기 위해서는 반정규화를 하여 조인을 통한 성능 저하는 해결될 것이다.

 

728x90