정규화
- 데이터의 일관성, 최소한의 중복, 최대한의 유연성을 위한 방법으로 데이터를 분해하는 과정
- 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법
- 테이블을 분해해 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높인다.
- 비즈니스에 변화가 발생해도 데이터 모델의 변경을 최소화할 수 있다.
- 제1 정규화부터 제5 정규화까지 있지만 실질적으로 제3 정규화까지만 수행
* 이상 현상 - 정규화를 수행하지 않아 입력, 수정 등에 문제가 발생하는 상황
정규화 절차
- 제1정규화
- 속성의 원자성을 확보, 기본키를 설정
- 함수적 종속성을 통해 기본키를 도출, X가 Y를 함수적으로 종속하고있고 X가 변경될 때 Y도 변경되면 X가 기본키가 된다.
- 제2정규화
- 기본키가 2개 이상의 속성으로 이루어진 경우 부분함수종속성을 제거한다.
- 기본키가 2개 이상으로 이루어진 경우 어떠한 속성이 기본키 중 하나의 속성에 종속된 경우 부분 함수 종속성이라 하고 이를 분해해야한다.
- 제3정규화
- 기본키를 제외한 칼럼간의 종속성을 제거 -> 이행함수 종속성 제거
- 이행함수 종속성 - 기본키를 제외하고 칼람간의 종속성이 발생하는것
반정규화
- 데이터베이스 성능 향승을 위해 데이터 중복을 허용하고 조인을 줄이는 성능 향상 방법
- select 성능을 향상시키지만 데이터 모델의 유연성은 낮아짐
반정규화가 필요한 경우
- 정규화 과정에서 수행 속도가 느려지는 경우
- 자주 조회되는 다량의 범위를 자주 처리해야하는 경우
- 통계/집계 정보가 자주 요구되는 경우
반정규화 절차
- 대상 조사 및 검토
- 데이터 처리 범위, 통계성 등을 확인해 반정규화 대상을 조사
- 다른 방법 검토
- 반정규화를 수행하기 전 다른 방법이 있는지 검토
- 클러스터링, 뷰, 인덱스 튜닝, 응용 프로그램, 파티션 등
- 클러스터링 - 인덱스 정보를 저장할 때 물리적으로 정렬해서 저장하는 방법, 조회 시 인접 블록을 연속해 읽어 성능 향상
- 반정규화 수행
- 테이블, 속성, 관계 등을 반정규화
반정규화 기법
- 계산된 칼럼 추가
- 총판매액, 평균잔고, 계좌평가 등과 같은 데이터를 미리 계산하고 그 결과를 특정 칼럼에 추가
- 테이블 수직 분할
- 하나의 테이블을 두 개 이상의 테이블로 분할
- 칼럼을 분할해 새로운 테이블을 만드는 것
- 테이블 수평 분할
- 하나의 테이블에 있는 값을 기준으로 테이블을 분할
- 파티션 기법
- 데이터베이스에서 파티션을 사용하여 테이블을 분할하는 것
- 파티션을 사용하면 논리적으로는 하나의 테이블이지만 여러 개의 데이터 파일에 분산되어 저장
- Range Partition - 데이터 값의 범위를 기중느로 파티션
- List Partition - 특정한 값을 지정하여 파티션
- Hash Partition - 해시 함수를 적용하여 파티션
- Composite Partition - 범위와 해시를 복합적으로 사용하여 파티션
- 데이터 조회 시 액세스 범위가 줄어 성능 향상
- 데이터가 분할되어 있어 I/O 성능 향상
- 각 파티션을 독립적으로 백업 및 복구 가능
테이블 병합
- 1대1 관계의 테이블을 병합하여 성능 향상
- 1대N 관계의 테이블도 병합하여 성능 향상이 가능하지만 데이터 중복 발생 가능
- 슈퍼타입, 서브타입 관계가 발생하면 테이블 통합을 통해 성능 향상
* 부모 엔티티(자식 엔티티의 공통적인 데이터가 포함된 엔티티)가 있고 자식 엔티티가 둘 이상으로 나눠져 있을 때 부모와 자식 테이블을 통합 -> 공통되지 않는 속성이 있으면 빈 칼럼이 생길 수 있음
테이블을 슈퍼타입 및 서브타입으로 변환 방법
- 1대1 - 슈퍼타입과 서브타입 테이블로 도출, 조인이 많이 발생하고 관리가 어려움
- Plus Type - 슈퍼타입과 서브타입 테이블로 도출, 조인이 발생하고 관리가 어려움
- Single Type - 슈퍼타입과 서브타입을 하나의 테이블로 도출, 조인 성능이 좋고 관리가 편하지만 입출력 성능이 나쁘다
분산 데이터베이스
- 데이터베이스 구조
- 중앙 집중형 DB - 한 대의 물리적 시스템에 DBMS를 사용하여 여러 사용자가 관리하여 사용하는 구조
- 분산 DB - 물리적으로 떨어진 DB를 네트워크로 연결해 단일 DB 처럼 보이지만 분산된 작업을 처리하는 구조
- 분산 DB의 투명성
- 고객의 입장에서는 시스템이 분산되어 있는지 여부를 알지 못하며, 하나의 DB를 사용하는 것처럼 사용하는 성질
- 분할 투명성 - 하나의 놀리적 릴레이션이 여러 단편으로 분할되어 각 단편의 사본이 여러 시스템에 저장되어 있음을 인식할 필요가 없다.
- 위치 투명성 - 사용하려는 데이터의 저장 장소를 명시할 필요가 없고 데이터가 어느 위치에 있어도 동일한 명령을 통해 접근할 수 있어야 한다.
- 지역 사상 투명성 - 지역 DBMS와 물리적 DB 사이의 사상이 보장됨에 따라 각 지역 시스템 이름과 무관한 이름이 사용 가능
- 중복 투명성 - DB 객체가 여러 시스템에 중복되어 존재함에도 고객과는 무관하게 데이터 일관성이 유지
- 장애 투명성 - DB가 분산되어 있는 각 지역의 시스템이나 통신망에 장애가 발생해도 데이터의 무결성 보장
- 병행 투명성 - 여러 고객의 응용 프로그램이 동시에 분산 DB에 트랜잭션을 수행해도 결과에 이상이 없다.
- 분산 DB 설계 방식
- 상향식 설계 방식 - 지역 스키마 작성 후 향후 전역 스키마를 작성하여 분산 DB를 구축
- 하향식 설계 방식 - 전역 스키마 작성 후 해당 지역 사상 스키마를 작성하여 분산 DB를 구축
- 분산 DB 장단점
- 장점
- DB 신뢰성과 가용성이 높다
- 병렬 처리를 수행하므로 응답이 빠름
- 용량 확장이 쉬움
- 단점
- 분리되어있어 관리와 통제가 어려움
- 보안 관리가 어려움
- 무결성 관리가 어려움
- 설계가 복잡함
- 장점
'Etc' 카테고리의 다른 글
[ChatGPT] Chat completions API를 활용한 질문에 최적화된 ai 답장 기능(프롬프트 개선) (0) | 2023.04.13 |
---|---|
[SQLD] 2과목 정리 - SQL 최적화의 원리 (2) | 2023.03.12 |
[SQLD] 1과목 정리 - 데이터 모델링 (0) | 2023.03.04 |
[클린 아키텍처] 프로그래밍 패러다임 (2) | 2023.02.22 |
[클린 아키텍처] 아키텍처와 설계 (0) | 2023.02.20 |