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와 메모리를 많이 사용한다.
- 정규화의 문제점을 해결하기 위해서는 반정규화를 하여 조인을 통한 성능 저하는 해결될 것이다.
'IT 정보 > 코딩' 카테고리의 다른 글
| [sql] 엔터티 식별자(Entity Identifier) (0) | 2023.03.05 |
|---|---|
| [sql] 데이터 정규화와 반정규화(2) - 반정규화 (0) | 2023.03.05 |
| [my SQL] sql의 집계함수와 산술함수 (0) | 2023.03.01 |
| [my SQL] sql null값 채우기, null의 특징 (0) | 2023.03.01 |
| [my SQL] 대소문자 구분 BINARY (0) | 2023.02.27 |