일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- hadoop
- 프로그래머스
- 에이블스쿨
- 빅데이터분석기사
- arima
- 하계인턴
- 에이블러
- r
- ETRI
- Ai
- 소셜네트워크분석
- 딥러닝
- KT 에이블스쿨
- python
- 지도학습
- 가나다영
- cnn
- 에트리 인턴
- KT AIVLE
- matplot
- SQLD
- kt aivle school
- 기계학습
- 하둡
- 빅분기
- 머신러닝
- 시계열
- dx
- SQL
- 한국전자통신연구원
- Eda
- 웹크롤링
- kaggle
- 한국전자통신연구원 인턴
- 서평
- 다변량분석
- httr
- 시각화
- ML
- ggplot2
Archives
- Today
- Total
소품집
[SQL] 정규화(Normalization)와 반정규화(De-Normalization) 본문
728x90
정규화란?
- 정규화는 데이터의 일관성, 최소한의 데이터 중복, 최소한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정이다.
- 정규화된 모델은 테이블이 분해된다. 테이블이 분해되면 직원 테이블과 부서 테이블 간에 부서코드로 조인(join)을 수행하며 하나의 합집합으로 만들 수 있다.
- 정규화를 하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다.
정규화 절차
정규화의 문제점
- 정규화는 데이터 조회(select) 시에 조인(join)을 유발하기 때문에 CPU와 메모리를 많이 사용한다.
- 아래 코드를 프로그램화 한다면 중첩된 루프(Nested Loop)를 사용해야 한다.
[ANSI JOIN}
select 사원번호, 부서코드, 부서명, 이름, 전화번호, 주소
from 직원, 부서
where 직원.부서코드 = 부서.부서코드;
select 사원번호, 부서코드, 부서명, 이름, 전화번호, 주소
from 직원 inner join 부서 on직원.부서코드=부서.부서코드;
정규화를 사용한 성능 튜닝
- 조인으로 인하여 성능이 저하되는 문제를 반정규화로 해결할 수 있다.
- 반정규화는 데이터를 중복시키기 때문에 또 다른 문제점을 발생시킨다.
반정규화란?
- 데이터베이스의 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법이다.
- 반정규화는 조회(select) 속도를 향상시키지만, 데이터 모델의 유연성은 낮아진다.
반정규화를 수행하는 이유
- 정규화에 충실하여 종속성, 활용성은 향상 되었지만 수행속도가 느려진 경우
- 다량의 범위를 자주 처리해야하는 경우
- 특정 범위의 데이터만 자주 처리하는 경우
- 요약/집계 정보가 자주 요구되는 경우
반정규화 절차
[Clustering?]
- 클러스터링 인덱스라는 것은 인덱스 정보를 저장할 때, 물리적으로 정렬해서 저장하는 방법이다.
- 따라서 조회 시 인접 블록을 연속적으로 읽기 때문에 성능이 향상된다.
반정규화 기법
계산된 컬럼 추가
- 배치 프로그램으로 총판매액, 평균잔고, 계좌평가를 미리 계산하고 그 결과를 특정 칼럼에 추가한다.
테이블 수직 분할
- 하나의 테이블의 두 개 이상의 테이블로 분할한다. 즉, 칼럼을 분할하여 새로운 테이블을 만드는 것이다.
테이블 수평분할
- 하나의 테이블에 있는 값을 기준으로 테이블을 분할하는 방법이다.
[Partition]
- 데이터베이스에서 파티션을 사용하여 테이블을 분할할 수 있다.
- 파티션을 사용하면 논리적으로는 하나의 테이블이지만, 여러 개의 데이터 파일에 분산되어 저장된다.
- Range Partition: 데이터 값의 범위를 기준으로 파티션을 수행한다.
- List Partition: 특정한 값을 지정하여 파티션을 수행한다.
- Hash Partition: 해시 함수를 적용하여 파티션을 수행한다.
- Composite Partition: 범위와 해시를 복합적으로 사용하여 파티션을 수행한다.
테이블 병합
- 1:1 관계의 테이블을 하나의 테이블로 병합해서 성능을 향상시킨다.
- 1:N 관계의 테이블을 병합하여 성능을 향상시킨다. 하지만 많은 양의 데이터 중복이 발생한다.
- 슈퍼 타입과 서브 타입 관계가 발생하면 테이블을 통합하여 성능을 향상시킨다.\
[Super type과 Sub type]
- 슈퍼타입과 서브타입의 관계는 배타적 관계와 포괄적 관계가 있는데,
배타적 관계는 고객이 개인이거나 법인고객인 경우를 의미한다.
- 포괄적인 관계는 고객이 개인고객일 수도 있고 법인고객일 수도 있는 것이다.
슈퍼 타입 및 서브 타입 변환 방법
728x90
'자격증 > SQL' 카테고리의 다른 글
[SQLD] 35회 오답풀이 (0) | 2021.03.15 |
---|---|
[SQL] 분산 데이터베이스(Distributed Database) (0) | 2021.03.11 |
[SQL] 데이터 모델링의 이해 (3) Entity, Attribute, Relation, Entity Identifier (0) | 2021.03.11 |
[SQL] 데이터 모델링의 이해(2) 3층 스키마 (0) | 2021.03.11 |
[SQL] 데이터 모델링의 이해 (1) (0) | 2021.03.11 |
Comments