[SQLD] SECTION 2. 데이터 모델과 성능
Programming/SQL

[SQLD] SECTION 2. 데이터 모델과 성능

[SQLD] SECTION 1. 데이터 모델링

[SQLD] SECTION 2. 데이터 모델과 성능

[SQLD] SECTION 3. SQL 기본

 

1. 정규화 (Normalization)

  1) 정규화

  • 정규화는 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정이다.

 

  2) 함수적 종속성 (Functional Dependency)

 

정규화 절차 설명
제1정규화 - 완전 함수 종속성
- 기본키(Primary key)를 설정한다.
제2정규화 - 부분 함수 종속성
- 기본키가 2개 이상의 속성으로 이루어진 경우 부분함수 종속성을 제거한다.
제3정규화 - 이행 함수 종속성
- 기본키를 제외한 칼럼 간의 종속성을 제거한다.
BCNF - Boyce-Codd Normal Form
- 기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해한다.
제4정규화 - 다중값 종속성
- 여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해햐여 다중값 종속성을 제거한다.
제5정규화 - 조인에 의해서 종속성이 발생되는 경우 분해한다.

 

 

  3) 정규화의 성능

 

  • 정규화는 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높인다.
  • 그러나 데이터 조회(SELECT) 시에 조인(JOIN)을 유발하기 때문에 CPU와 메모리를 많이 사용한다.
  • 조인으로 인하여 성능이 저하되는 문제를 반정규화로 해결할 수 있다. 그러나 반정규화는 데이터를 중복시키기 때문에 또 다른 문제점을 발생시킨다.

 

2. 반정규화

  1) 반정규화 (De-Normalization)

  • 데이터베이스의 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법이다.
  • 반정규화는 조회(SELECT) 속도를 향상하지만, 데이터 모델의 유연성은 낮아진다.

 

  2) 반정규화를 수행하는 경우

  • 정규화에 충실하면 종속성, 활용성은 향상되지만 수행 속도가 느려지는 경우
  • 다량의 범위를 자주 처리해야 하는 경우
  • 특정 범위의 데이터만 자주 처리하는 경우
  • 요약 / 집계 정보가 자주 요구되는 경우

 

  • 반정규화 절차
반정규화 절차 설명
대상 조사 및 검토 - 데이터 처리 범위, 통계성 등을 확인해서 반정규화 대상을 조사한다.
다른 방법 검토 - 반정규화를 수행하기 전에 다른 방법이 있는지 검토한다.- 예를 들어 클러스터링, 뷰, 인덱스 튜닝, 응용 프로그램, 파티션 등을 검토한다.
반정규화 수행 - 테이블, 속성, 관계 등을 반정규화 한다.

 

  •  클러스터링 (Clustering)
    • 클러스터링 인덱스라는 것은 인덱스 정보를 저장할 때 물리적으로 정렬해서 저장하는 방법이다.
    • 따라서 조회 시에 인접 블록을 연속적으로 읽기 때문에 성능이 향상된다.

 

  3) 반정규화 기법

  • 중복 칼럼 추가 : 조인 감소를 위해 여러 테이블에 동일한 칼럼을 갖도록 한다.
  • 파생 칼럼 추가 : 조회 성능을 우수하게 하기 위해 미리 계산된 칼럼을 갖도록 한다.

 

  • 이력 테이블 칼럼 추가 : 최신값을 처리하는 이력의 특성을 고려하여 기능성 칼럼을 추가한다.
    • 대량의 이력데이터를 처리할 때 불특정 날 조회나 최근 값 조회 시 나타날 수 있는 성능 저하를 예방하기 위해 이력테이블에 기능성 칼럼 추가
    • ex/ 최근값 여부, 시작과 종료일자 등

 

  • 기본키에 의한 칼럼 추가
    • 복합 의미를 갖는 기본키를 단일 속성으로 구성했을 경우 발생됨.
    • 단일 기본키 안에서 특정 값을 별도로 조회하는 경우 성능 저하가 발생할 수 있다.
    • 이떄 이미 기본키 안에 데이터가 존재하지만 성능 향상을 위해 일반속성으로 포함시킬 수 있다.
  • 응용시스템 오작동을 대비한 칼럼 추가
    • 업무적으로는 의미가 없지만 사용자가 데이터 처리를 하다가 잘못 처리하여 원래 값으로 복구하기를 원하는 경우 대비
    • 이전 데이터를 임시적으로 중복하여 보관하는 기법
    • 이는 오작동 처리를 위한 임시적인 기법이지만 이것을 이력 데이터 모델로 풀어내면 정상적인 데이터 모델의 기법이 될 수 있다.

 

  • 테이블 수직 분할
  • 테이블 수평 분할
    • 파티션 (Partition) 기법
      • 데이터베이스에서 파티션을 사용하여 테이블을 분할할 수 있다. 파티션을 사용하면 논리적으로는 하나의 테이블이지만 여러 개의 데이터 파일에 분산되어서 저장된다.
      • Range Partition : 데이터 값의 범위를 기준으로 파티션을 수행한다.
      • List Partition : 특정한 값을 지정하여 파티션을 수행한다.
      • Hash Partition : 해시 함수를 적용하여 파티션을 수행한다.
      • Composite Partition : 범위와 해시를 복합적으로 사용하여 파티션을 수행한다.
    • 파티션 테이블의 장점
      • 데이터 조회 시에 액세스 (Access) 범위가 줄어들기 때문에 성능이 향상된다.
      • 데이터가 분할되어 있기 때문에 I/O (Input/Output)의 성능이 향상된다.
      • 각 파티션을 독립적으로 백업 및 복구가 가능하다.
  • 테이블 병합
    • 1대1 관계의 테이블을 하나의 테이블로 병합해서 성능을 향상시킨다.
    • 1대N 관계의 테이블을 병합하여 성능을 향상시킨다. 하지만 많은 양의 데이터 중복이 발생한다.
    • 슈퍼 타입과 서브 타입 관계가 발생하면 테이블을 통합하여 성능을 향상시킨다.

 

  • Super type과 Sub type
    • 고객 엔터티는 개인고객과 법인고객으로 분류된다. 이때 고객 엔터티는 슈퍼 타입이고 개인고객과 법인고객은 서브타입이 된다. 즉, 부모와 자식 간의 관계가 나타난다.
    • 슈퍼 타입과 서브 타입의 관계는 배타적 관계와 포괄적 관계가 있는데, 배타적 관계는 고객이 개인고객이거나 법인고객인 경우를 의미한다. 포괄적 관계는 고객이 개인고객일 수도 있고 법인고객일 수도 있다.

 

  • 슈퍼타입 및 서브 타입 변환 방법
변환 방법 설명
OneToOne Type - 슈퍼 타입과 서브 타입을 개별 테이블로 도출한다.- 테이블의 수가 많아서 조인이 많이 발생하고 관리가 어렵다.
Plus Type - 슈퍼 타입과 서브 타입 테이블로 도출한다.
- 조인이 발생하고 관리가 어렵다.
Single Type - 슈퍼 타입과 서브 타입을 하나의 테이블로 도출한다.- 조인 성능이 좋고 관리가 편리하지만, 입출력 성능이 나쁘다.

 

 

3. 분산 데이터베이스

  1) 분산 데이터베이스

  • 중앙 집중형 데이터베이스 : 데이터베이스 시스템 구축 시에 한 대의 물리적 시스템에 데이터베이스 관리 시스템을 설치하고 여러 명의 사용자가 데이터베이스 관리 시스템에 접속하여 데이터베이스를 사용하는 구조
  • 분산 데이터베이스 : 물리적으로 떨어진 데이터베이스에 네트워크로 연결하여 단일 데이터베이스 이미지를 보여주고 분산된 작업 처리를 수행하는 데이터베이스
  • 분산 데이터베이스를 사용하는 고객은 시스템이 네트워크로 분산되어 있는지의 여부를 인식하지 못하면서, 자신만의 데이터베이스를 사용하는 것처럼 사용할 수 있다. 이처럼 데이터베이스는 투명성을 제공해야 한다.

 

  • 분산 데이터베이스의 투명성 종류
투명성 설명
분할 투명성 - 고객은 하나의 논리적 릴레이션이 여러 단편으로 분할되어 각 단편의 사본이 여러 시스템에 저장되어 있음을 인식할 필요가 없다.
위치 투명성 - 고객은 사용하려는 데이터의 저장 장소를 명시할 필요가 없다
- 고객은 데이터가 어느 위치에 있더라도 동일한 명령을 사용하여 데이터에 접근할 수 있어야 한다.
지역 사상 투명성 - 지역 DBMS와 물적 데이터베이스 사이의 사상이 보장됨에 따라 각 지역 시스템 이름과 무관한 이름이 사용 가능하다.
중복 투명성 - 데이터베이스 객체가 여러 시스템에 중복되어 존재함에도 고객과는 무관하게 데이터의 일관성이 유지된다.
장애 투명성 - 데이터베이스가 분산되어 있는 각 지역의 시스템이나 통신망에 이상이 발생해도, 데이터의 무결성은 보장된다.
병행 투명성 - 여러 고객의 응용 프로그램이 동시에 분산 데이터베이스에 대한 트랜잭션을 수행하는 경우에도 결과에 이상이 없다.

 

 

  2) 분산 데이터베이스 설계 방식

  • 분산 데이터베이스의 구축 방법에는 상향식 설계 방식과 하향식 설계 방식 2가지가 있다.
  • 상향식 설계 방식
    • 지역 스키마 작성 후 향후 전역 스키마를 작성하여 분산 데이터베이스를 구축한다.
  • 하향식 설계 방식
    • 전역 스키마 작성 후 해당 지역 사상 스키마를 작성하여 분산 데이터베이스를 구축한다.

출처 : https://blog.naver.com/bi1189/220999132224

 

  • 분산 데이터베이스 장점과 단점
장점 단점
- 데이터베이스 신뢰성과 가용성이 높다.- 병렬 처리를 수행하므로 빠른 응답이 가능하다.- 분산 데이터 베이스를 추가하여 시스템 용량 확장이 쉽다. - 여러 네트워크를 통해 분리되어 있기 때문에 관리와 통제가 어렵다.- 보안 관리가 어렵다.- 데이터 무결성 관리가 어렵다.- 데이터베이스 설계가 복잡하다.