1. 정규화란?
데이터 중복을 피하고 삽입/삭제/갱신 이상 현상을 방지하기 위해 데이터를 분해하는 과정!
정규화는 제 1 정규화 ~ 제 6 정규화 까지 여러 과정이 존재하지만, 실무에서는 대체로 1 ~ 3 정규화까지의 과정을 거치게 된다.
2. 제 1 정규형
1 정규화를 만족시키면 제 1 정규형이 된다.
보다시피 연락처 칼럼에 두 가지 값이 들어가 있다. 즉 모든 칼럼은 오직 하나의 값만 가지도록 설계하는 것을 1 정규형이라한다.
3. 제 2 정규형
현재 주문 테이블에선 고객 아이디와 주문번호가 하나의 PK로 구성되어 있다.
하지만 고객명이나 고객등급 칼럼의 경우 고객아이디에만 함수적 종속성을 가진다.
즉 주문번호에는 함수적 종속성을 가지지 않는다. 따라서 해당 테이블은 아래와 같이 분리될 수 있다.
4. 제 3 정규형
현재 고객 테이블에서 직업명 컬럼은 직업코드에 종속되어있다. 따라서 이런 경우 제 3 정규형에 위반 사례이다.
제 3 정규형을 만족하려면 아래와 같이 테이블을 나누어야 한다.
이때 고객 엔터티에서 직업코드 컬럼은 FK가 될 것이다.
5. 정규화와 성능
정규화를 수행해서 조인이 발생하게 되더라도 효율적인 인덱스 사용을 통해 조인 연산을 수행하면 성능상 단점은 거의 없다.
정규화를 수행해서 소량의 테이블이 생성된다면 소량의 테이블을 먼저 읽어 조인 연산을 수행하면 되므로 성능상 유리할 수 있다.
정규화가 제대로 되지 않으면 동일한 종류의 속성을 여러 개가 있을 수 있고 과다한 인덱스가 만들어질 수 있는데 정규화를 한다면 하나의 인덱스만 만들어도 될 것이다.
'Backend > Database' 카테고리의 다른 글
SQL Injection (0) | 2021.06.18 |
---|---|
Transaction (0) | 2021.05.10 |