본문 바로가기

Etc

[SQLD] 1과목 정리 - 데이터 모델과 성능

정규화

  • 데이터의 일관성, 최소한의 중복, 최대한의 유연성을 위한 방법으로 데이터를 분해하는 과정
  • 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법
  • 테이블을 분해해 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높인다.
  • 비즈니스에 변화가 발생해도 데이터 모델의 변경을 최소화할 수 있다.
  • 제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 신뢰성과 가용성이 높다
      • 병렬 처리를 수행하므로 응답이 빠름
      • 용량 확장이 쉬움
    • 단점 
      • 분리되어있어 관리와 통제가 어려움
      • 보안 관리가 어려움
      • 무결성 관리가 어려움
      • 설계가 복잡함