정규화(Normalization)
- 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정
- 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법
- 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높임
- 정규화 수행시 비즈니스에 변화가 발생하여도 데이터 모델의 변경을 최소화할 수 있음
- 제1정규화부터 제5정규화까지 있지만, 실질적으로 제3정규화까지만 수행
정규화 절차
정규화 절차 | 설명 |
---|---|
제1정규화 | - 속성의 원자성 확보 - 기본키 설정 |
제2정규화 | - 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해) - 기본키가 하나의 칼럼으로 이루어지면 제2정규화는 생략 |
제3정규화 | - 기본키를 제외한 칼럼 간에 종속성을 제거 - 이행 함수 종속성을 제거 |
BCNF | 기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해 |
제4정규화 | 여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해하여 다중값 종속성 제거 |
제5정규화 | 조인에 의해 종속성이 발생되는 경우 분해 |
정규화의 문제점: 정규화는 데이터 조회(SELECT) 시에 조인(Join)을 유발하기에 CPU와 메모리를 많이 사용.
반정규화(De-Normalization)
데이터베이스의 성능 향상을 위해 데티어 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법
조회(SELECT) 속도를 향상하지만, 데이터 모델의 유연성은 낮아짐
반정규화를 수행하는 경우
- 정규화에 충실하면 종속성, 활용성은 향상되지만 숙도가 느려지는 경우
- 다량의 범위를 자주 처리해야 하는 경우
- 특정 범위의 데이터만 자주 처리하는 경우
- 요약/집계 정보가 자주 요구되는 경우
반정규화 절차
- 대상 조사 및 검토: 데이터 처리 범위, 통계성 등을 확인해서 반정규화 대상 조사
- 다른 방법 검토: 반정규화를 수행하기 전에 다른 방법이 있는지 검토(클러스터링, 뷰, 인덱스 튜닝, 응용프로그램, 파티션 검토)
- 반정규화 수행: 테이블, 속성, 관계 등을 반정규화
반정규화 기법
- 계산된 칼럼 추가
- 테이블 수직 분할: 하나의 테이블을 두 개 이상의 테이블로 분할 (칼럼을 분할하여 새로운 테이블 생성)
- 테이블 수평 분할: 하나의 테이블에 있는 값을 기준으로 테이블 분할
- 테이블 병합: 테이블을 하나의 테이블로 병합하여 성능 향상
파티션(Partition) 기법
데이터베이스에서 파티션을 사용하여 테이블을 분할할 수 있음.
파티션을 사용하면 논리적으로는 하나의 테이블이지만 여러 개의 데이터 파일에 분산되어 저장됨.
기법 | 설명 |
---|---|
Range Partition | 데이터 값의 범위를 기준으로 파티션 수행 |
List Partition | 특정한 값을 지정하여 파티션 수행 |
Hash Partition | 해시 함수를 적용하여 파티션 수행 |
Composite Partition | 범위와 해시를 복합적으로 사용하여 파티션 수행 |
파티션 테이블의 장점
- 데이터 조회 시 액세스 범위가 줄어들기에 성능 향상
- 데이터가 분할되어 있기에 I/O(Input/Output)의 성능 향상
- 각 파티션을 독립적으로 백업 및 복구 가능
테이블 병합
- 1대1 관계의 테이블을 하나의 테이블로 병합하여 성능 향상
- 1대N 관계의 테이블을 병합하여 성능 향상, 많은 양의 데이터 중복이 발생
- 슈퍼 타입과 서브 타입 관계가 발생하면 테이블을 통합하여 성능 향상
Super Type, Sub Type: 엔터티에 중복되는 값을 상속 Super Type은 부모, Sub Type은 자식으로 생각하면 됨
슈퍼 타입 및 서브 타입 변환 방법
변환 방법 | 설명 |
---|---|
OneToOne Type | - 슈퍼 타입과 서브 타입을 개별 테이블로 도출 - 테이블의 수가 많아서 조인이 많이 발생하고 관리가 어려움 |
Plus Type | - 슈퍼 타입과 서브 타입 테이블로 도출 - 조인이 발생하고 관리가 어려움 |
Single Type | - 슈퍼 타입과 서브 타입을 하나의 테이블로 도출 - 조인 성능이 좋고 관리가 편하지만, 입출력 성능이 나쁨 |
분산 데이터베이스
- 중앙 집중형 데이터베이스: 한 대의 물리적 시스템에 DBMS를 설치하고 여러 명의 사용자가 DBMS에 접속하여 데이터베이스를 사용하는 구조
- 분산 데이터베이스: 물리적으로 떨어진 데이터베이스에 네트워크로 연결하여 단일 데이터베이스 이미지를 보여 주고 분산된 작업 처리를 수행하는 데이터베이스
DBMS: 데이터베이스 관리 시스템
분산 데이터베이스의 투명성
투명성 | 설명 |
---|---|
분할 투명성 | 고객은 하나의 논리적 릴레이션이 여러 단편으로 분할되어 각 단편의 사본이 여러 시스템에 저장되어 있을을 인식할 필요가 없음 |
위치 투명성 | - 고객이 사용하려는 데이터의 저장 장소를 명시할 필요가 없음 - 고객은 데이터가 어느 위치에 있더라도 동일한 명령을 사용하여 데이터에 접근할 수 있어야 함 |
지역 사상 투명성 | 지역 DBMS와 물리적 데이터베이스 사이의 사상이 보장됨에 따라 각 지역 시스템 이름과 무관한 이름이 사용 가능 |
중복 투명성 | 데이터베이스 객체가 여러 시스템에 중복되어 존재함에도 고객과는 무관하게 데이터 일관성이 유지 |
장애 투명성 | 데이터베이스가 분산되어 있는 각 지역의 시스템이나 통신망에 이상이 발생해도, 데이터의 무결성은 보장 |
병행 투명성 | 여러 고객의 응용 프로그램이 동시에 분산 데이터베이스에 대한 트랜잭션을 수행하는 경우에도 결과에 이상이 없음 |
분산 데이터베이스 설계 방식
- 상향식 설계 방식: 지역 스키마 작성 후 향후 전역 스키마를 작성하여 분산 데이터베이스 구축
- 하향식 설계 방식: 전역 스키마 작성 후 해당 지역 사상 스키마를 작성하여 분산 데이터베이스 구축
분산 데이터베이스 장점과 단점
장점
- 데이터베이스 신뢰성과 가용성이 높음
- 분산 데이터베이스가 병렬 처리를 수행하기에 빠른 응답 가능
- 분산 데이터베이스를 추가하여 시스템 용량 확장이 쉬움
단점
- 데이터베이스가 여러 네트워크를 통해 분리되어 있기에 관리와 통제가 어려움
- 보안관리가 어려움
- 데이터 무결성 관리가 어려움
- 데이터베이스 설계가 복잡