정규화(Normalization)
정규화는 데이터 중복을 제거하고, 데이터 모델의 독립성을 확보하기 위한 방법이다. 정규화를 수행하면 업무에 변화가 생겨도 데이터 모델의 변경을 최소화할 수 있다.
아래 Entity 도표처럼 만약 사원에 대한 정보와 부서에 대한 정보가 한번에 섞여있다고 가정해보자. 그럼 사원만 한 명 추가할려고해도 부서코드값과 부서명 등 부서와 관련된 정보를 null값이라도 강제로 넣어주어야한다. 이렇게 비즈니스에 필요한 엔터티와 상관없는 정보가 입력되는 것을 이상현상(Abnomaly)라고 한다.
정규화의 3단계
본래 정규화는 제1 정규화 - 제 5정규화까지 있지만 실질적으로는 제 3정규화까지만 진행한다. 정규화는 함수적 종속성을 기반으로한다. 즉 기본키(X)가 변할 때 컬럼값(Y)가 변하는 관계를 근거로 정규화를 수행한다.
제 1 정규화
제 1정규화는 기본키를 설정하는 것이다.
위 표에서 유일성을 만족할 수 있는 속성이 있는지 확인해본다. 그렇지 못하다면 2개의 속성값을 찾아야 한다. 여기서는 상품 코드만으로는 유일성을 만족할 수 없으며, 상품코드+주문번호 조합은 유일성을 만족시킬 수 있게 된다. 각 6행이 상품코드+주문번호가 중복되는 경우는 없기 때문이다. 따라서 상품코드와 주문번호를 기본키로 설정한다.
제 2 정규화
제 2 정규화는 기본키가 2개 이상인 경우에만 수행한다. 이때 부분함수 종속성이 발생하면 제 2정규화를 수행한다. 부분함수 종속성이란, 아래 그림처럼 함수적 종속성의 일부가 독립적으로 떨어져나올 수 있는 상태를 말한다.
학번, 과목번호를 기본키로 갖고, 성적, 지도교수, 학과를 속성으로 갖는 엔터티가 있는 상황이다. 여기서 만약 학번만 바껴도 지도 교수와 학과가 바뀌는 데이터라면, 기본키 중 학번을 분리하여 따로 엔터티를 만들어주는 것이 부분함수 종속성을 제거하는 제 2 정규화이다.
위 제 1정규화 예시로 보면, 상품명과 재고수량은 상품코드가 바뀌면 변하므로 상품이라는 엔터티로 부분함수 종속성을 제거할 수 있다.
제 3 정규화
제 3 정규화는 이행함수 종속성을 제거한다. 이행함수 종속성은 기본키를 제외한 컬럼 간에 종속성이 발생하는 것이다.
기본키가 아닌 지도교수와 학과 컬럼 간에 함수적 종속성이 있을 경우, 지도교수 -> 학과의 관계로 새롭게 엔터티를 만들어 테이블을 도출하는 방식이다.
위 그림과 같이 기본키가 아닌 컬럼간에 종속성이 발생하는 경우가 있다면 고객사 테이블을 만들고, 고객사 번호, 우선순위 컬럼을 지정하여 엔터티화하는 것이 제 3 정규화이다.
참조
0. [도서] 영진닷컴 - SQL 개발자 이론서 + 기출문제
1. 문득, 하늘을 올려다보니 블로그
https://beansberries.tistory.com/32
'Programming-[Backend] > SQL' 카테고리의 다른 글
[SQLD] 5. SQL 기본 1 - 관계형 데이터베이스, 기본 용어, SQL 종류, 실행순서 (0) | 2022.05.14 |
---|---|
[SQLD] 4. 반정규화와 분산데이터베이스 (0) | 2022.05.13 |
[SQLD] 2. 엔터티, 속성, 관계, 식별자 (2) | 2022.05.10 |
[SQLD] 1. 데이터 모델링의 종류, 특징, ERD, 3 level schema (0) | 2022.05.09 |
[TIL] 서브쿼리 - 여집합, 서브쿼리의 연결 고리 찾아서 해결 (0) | 2022.05.08 |