정규화
- 데이터의 일관성, 최소한의 데이터 중복, 최소한의 데이터 유연성을 위한 방법
- 데이터를 분해하는 과정
- 정규화된 모델은 테이블이 분해된다.
- 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거된다.
정규화 절차
- 제 1정규화
- 속성의 원자성을 갖도록 테이블을 분해
- 속성의 중복값을 제거
- 기본키 설정
- 제 2정규화
- 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거하여 완전 함수 종속을 만족하도록 테이블을 분해하는 것
- 부분 함수 종속성이란 기본키가 2개 이상인 칼럼으로 이루어진 경우에만 발생 (기본키가 1개면 스킵)
- 복합 인스턴스에 대해 각 인스턴의 종속적 중복을 삭제
- 제 3정규화
- 기본키를 제외한 칼럼 간에 종속성 제거
- 이행 함수 종속성을 제거
- 이행적 종속은 A->B, B->C가 성립할 땐 A->C가 성립되는 것
- 일반 속성의 종속성을 제거
- BCNF 정규화
- 모든 결정자가 후보키가 되도록 테이블을 분해하는 것
- BCNF 는 복수의 후보키가 있고 후보키들이 복합 속성이어야 하며, 서로 중첩되어야 한다.
- 제 4정규화
- 여러 칼럼들이 하나의 칼럼을 종속시키는 경우, 분해하여 다중값 종속성을 제거
- 다치 종속성을 제거
- 제 5정규화
- 조인에 의해 종속성이 발생되는 경우 분해
정규화의 문제점
정규화는 데이터 조회 시 조인을 유발하므로 cpu와 메모리를 많이 사용하게 된다. -> 조인으로 인하여 성능이 저하되는 문제를 반정규화로 해결할 수 있다. 다만 반정규화는 데이터를 중복시키기에 다른 문제점을 발생시킨다.
반정규화
- 데이터베이스의 성능 향상을 위해, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법
- 데이터 무결성이 깨질 수 있는 위험을 감수하고 조회 속도를 향상시키지만, 데이터 모델의 유연성을 낮아진다.
반정규화를 수행하는 이유
- 정규화에 충실하여 종속성, 활용성은 향상 되었지만 수행속도가 느려진 경우
- 다량의 범위를 자주 처리하는 경우
- 특정 범위의 데이터만 자주 처리하는 경우
- 요약/집계 정보가 자주 요구되는 경우
반정규화 절차
1. 대상 조사 및 검토 : 데이터 처리 범위, 통계성 등을 확인하여 반정규화 대상을 조사
- 범위 처리 빈도수 조사
- 대량의 범위 처리 조사
- 통계성 프로세스 조사
- 테이블 조인 개수
2. 다른 방법 검토 : 반정규화를 수행하기 전 다른 방법이 있는지 검토
- 뷰 테이블
- 클러스터링 적용
- 인덱스의 조정
- 응용 애플리케이션
3. 반정규화 수행 : 테이블, 속성, 관계 등을 반정규화한다.
반정규화 대상에 대한 다른 방법으로 처리
- 지나치게 많은 Join이 걸려 데이터를 조회하는 작업이 기술적으로 어려울 경우 View 를 사용하여 이를 해결
- 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우 클러스터링을 적용하거나 인덱스를 조정함으로써 성능을 향상시킬 수 있음
- 대량의 데이터는 PK의 성격에 따라 부분적인 테이블로 분리 가능 (Partitioning 기법이 적용)
- 응용 애플리케이션에서 로직을 구사하는 방법을 변경하여 성능을 향상시킬 수 있음
클러스터링 (Clustering)
디스크로부터 데이터를 읽어오는 시간을 줄이기 위해 조인이나 자주 사용되는 테이블의 데이터를 디스크의 같은 물리적인 위치에 정렬해서 저장시키는 방법
클러스터링 인덱스라는 것은 인덱스 정보를 저장할 때, 물리적으로 정렬해서 저장하는 방법으로 조회 시 인접 블록을 연속적으로 읽기 때문에 성능이 향상된다.
반정규화 기법
- 컬럼의 반정규화
- 계산된 칼럼(파생칼럼) 추가
- 중복 칼럼 추가
- 이력 테이블 컬럼 추가
- PK에 의한 칼럼 추가
- 응용 시스템 오작동을 위한 칼럼 추가
- 테이블의 반정규화
- 테이블 명함
- 1:1 관계 테이블 병합
- 1:M 관계 테이블 병합
- 슈퍼/서브 타입 테이블 병합
- 하나의 테이블을 두 개 이상의 테이블로 분할 (수직/수평분할)
- 테이블 추가
- 중복 테이블 추가
- 통계 테이블 추가
- 이력 테이블 추가
- 부분 테이블 추가
- 테이블 명함
- 테이블 수평 분할
- 하나의 테이블에 있는 값을 기준으로 테이블을 분할
'Web Study > DataBase' 카테고리의 다른 글
SQLD - Join 에 대해 (0) | 2023.09.10 |
---|---|
SQLD - Transaction (트랜잭션) (0) | 2023.09.07 |
SQLD - 정규 표현식 (0) | 2023.08.30 |
SQLD - 스키마, ERD (0) | 2023.08.21 |
SQLD - 데이터 모델링의 이해 (0) | 2023.08.20 |