1. 정규화
1) 정규화
- 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정
- 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법
- 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높임
- 정규화를 수행하면 비즈니스에 변화가 생겨도 데이터 모델의 변경을 최소화
- 이상현상(Anomaly)
- 정규화가 수행되지 않은 테이블에서 새 데이터 삽입 시 불필요한 값이 삽입되는 현상
- 이 문제를 해결하기 위해 정규화를 진행
- 정규화 절차
정규화 절차 | 설명 |
제1정규화 | -속성의 원자성 확보 -기본키를 설정 |
제2정규화 | 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거 |
제3정규화 | -기본키를 제외한 칼럼 간에 종속성 제거 -이행 함수 종속성 제거 |
BCNF | 기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해 |
제4정규화 | 여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해하여 다중값 종속성을 제거 |
제5정규화 | 조인에 의해서 종속성이 발생되는 경우 분해 |
2. 정규화와 성능
1) 정규화의 문제점
- 정규화는 데이터 조회(SELECT) 시에 조인을 유발하기 때문에 CPU와 메모리를 많이 사용
Ex) 직원과 부서 테이블에서 부서코드가 같은 것을 조회
SELECT 사원번호, 부서코드, 부서명, 이름, 전화번호, 주소
FROM 직원 INNER JOIN 부서
ON 직원.부서코드=부서.부서코드;
이를 프로그램화 하면
for(int i=0;i<N;i++)
{
for(int j=0;j<M;j++)
{
if(직원_부서코드[i]==부서_부서코드[j])
}
}
다음과 같은 형태의 중첩된 루프가 발생한다.
- 중첩된 루프(Nested Loop)
- 보통 조인 시 발생
- 데이터의 양이 증가하면 비교해야 하는 건수도 증가
- 조인이 부하를 유발
- 중첩된 루프를 통한 성능 저하를 해결하기 위해 반정규화를 사용
3. 반정규화(De-Normalization)
1) 반정규화
- 데이터베이스의 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 기법
- 반정규화는 조회(SELECT) 속도를 향상하지만, 데이터 모델의 유연성은 낮아짐
2) 반정규화를 수행하는 경우
- 정규화에 충실하면 종속성, 활용성은 향상되지만 수행 속도가 느려지는 경우
- 다량의 범위를 자주 처리해야 하는 경우
- 특정 범위의 데이터만 자주 처리하는 경우
- 요약/집계 정보가 자주 요구되는 경우
- 반정규화 절차
- 대상 조사 및 검토
- 데이터 처리 범위, 통계성 등을 확인해서 반정규화 대상을 조사
- 다른 방법 검토
- 반정규화를 수행하기 전에 다른 방법이 있는지 검토
- Ex) 클러스터링, 뷰, 인덱스 튜닝, 응용 프로그램, 파티션 등
- 반정규화 수행
- 데이블, 속성, 관계 등을 반정규화
- 대상 조사 및 검토
3) 반정규화 기법
- 계산된 칼럼 추가
- 테이블 수직 분할
- 테이블 수평 분할
- 테이블 병합
'SQLD' 카테고리의 다른 글
1. 데이터 모델링 (0) | 2024.02.13 |
---|