Programming-[Backend]/SQL

[SQLD] 3. 정규화

컴퓨터 탐험가 찰리 2022. 5. 13. 05:01
728x90
반응형

 

정규화(Normalization)

 

정규화는 데이터 중복을 제거하고, 데이터 모델의 독립성을 확보하기 위한 방법이다. 정규화를 수행하면 업무에 변화가 생겨도 데이터 모델의 변경을 최소화할 수 있다.

 

아래 Entity 도표처럼 만약 사원에 대한 정보와 부서에 대한 정보가 한번에 섞여있다고 가정해보자. 그럼 사원만 한 명 추가할려고해도 부서코드값과 부서명 등 부서와 관련된 정보를 null값이라도 강제로 넣어주어야한다. 이렇게 비즈니스에 필요한 엔터티와 상관없는 정보가 입력되는 것을 이상현상(Abnomaly)라고 한다.

 

정규화의 3단계

 

본래 정규화는 제1 정규화 - 제 5정규화까지 있지만 실질적으로는 제 3정규화까지만 진행한다. 정규화는 함수적 종속성을 기반으로한다. 즉 기본키(X)가 변할 때 컬럼값(Y)가 변하는 관계를 근거로 정규화를 수행한다.

 

 

제 1 정규화

제 1정규화는 기본키를 설정하는 것이다.

 

 

위 표에서 유일성을 만족할 수 있는 속성이 있는지 확인해본다. 그렇지 못하다면 2개의 속성값을 찾아야 한다. 여기서는 상품 코드만으로는 유일성을 만족할 수 없으며, 상품코드+주문번호 조합은 유일성을 만족시킬 수 있게 된다. 각 6행이 상품코드+주문번호가 중복되는 경우는 없기 때문이다. 따라서 상품코드와 주문번호를 기본키로 설정한다.

 

 

 

제 2 정규화

제 2 정규화는 기본키가 2개 이상인 경우에만 수행한다. 이때 부분함수 종속성이 발생하면 제 2정규화를 수행한다. 부분함수 종속성이란, 아래 그림처럼 함수적 종속성의 일부가 독립적으로 떨어져나올 수 있는 상태를 말한다.

 

참조1의 그림

 

학번, 과목번호를 기본키로 갖고, 성적, 지도교수, 학과를 속성으로 갖는 엔터티가 있는 상황이다. 여기서 만약 학번만 바껴도 지도 교수와 학과가 바뀌는 데이터라면, 기본키 중 학번을 분리하여 따로 엔터티를 만들어주는 것이 부분함수 종속성을 제거하는 제 2 정규화이다.

 

위 제 1정규화 예시로 보면, 상품명과 재고수량은 상품코드가 바뀌면 변하므로 상품이라는 엔터티로 부분함수 종속성을 제거할 수 있다.

 

제 3 정규화

제 3 정규화는 이행함수 종속성을 제거한다. 이행함수 종속성은 기본키를 제외한 컬럼 간에 종속성이 발생하는 것이다. 

 

기본키가 아닌 지도교수와 학과 컬럼 간에 함수적 종속성이 있을 경우, 지도교수 -> 학과의 관계로 새롭게 엔터티를 만들어 테이블을 도출하는 방식이다.

위 그림과 같이 기본키가 아닌 컬럼간에 종속성이 발생하는 경우가 있다면 고객사 테이블을 만들고, 고객사 번호, 우선순위 컬럼을 지정하여 엔터티화하는 것이 제 3 정규화이다.

 

 

 


참조

 

0. [도서] 영진닷컴 - SQL 개발자 이론서 + 기출문제

 

1. 문득, 하늘을 올려다보니 블로그

https://beansberries.tistory.com/32

 

 

 

 

 

728x90
반응형