SQLD - 데이터 모델과 성능

1. 정규화

데이터 일관성, 중복 제거, 유연성을 위한 방법이다. 중복을 제거하면서 독립성을 확보할 수 있다. 제1정규화부터 제 5정규화까지 있지만 실질적으로 3정규화 까지만 수행한다.

  • 정규화 절차

    • 제1정규화
    • 속성의 원자성 확보
    • 기본키 설정
    • 제2정규화
    • 기본키가 2개 이상의 속성으로 이루어졌다면, 부분 함수 종속성을 제거한다.
    • 제3정규화
    • 기본키를 제외한 칼럼간의 종속성을 제거한다.
    • 이행 함수 종속성을 제거한다.
    • BCNF
    • 기본키를 제외하고 후보키가 있다면, 후보키가 기본키를 종속시키면 분해한다.
    • 제4정규화
    • 여러 칼럼이 하나의 칼럼을 종속시키면 다중값 종속성을 제거하기 위해 분해한다.
    • 제5정규화
    • 조인에 의해 종속성이 발생되는 경우 분해한다.

2. 함수적 종속성

  • 제1정규화

    • 함수적 종속성은 X가 변화하면 Y도 변화하는지 확인하는 것이다.
    • 기본키를 잡는 것이 제1정규화이다.
  • 제2정규화

    • 기본키가 1개의 칼럼으로 이루어지면 제2정규화는 생략한다.
    • 기본키에 포함된 일부 속성이 다른 속성을 함수적으로 종속할 때 부분 함수 종속성이 발생하고 분해해야 한다.
  • 제3정규화

    • 이행 함수 종속성을 제거한다. 기본키를 제외하고 칼럼간에 종속성이 발생하는 경우이다.
    • 제1정규화와 제2정규화를 거친 후에 해야한다.
  • BCNF(Boyce-Codd Normal Form)

    • 복수의 후보키가 있고, 후보키들이 복합 속성이어야 하고, 서로 중첩이어야 한다.

3. 정규화와 성능

정규화는 데이터 조회(SELECT)시에 조인(Join)을 유발하기 때문에 CPU와 메모리를 많이 사용한다. 중복을 제거하고 유연성을 향상 시키기 위해 정규화를 하지만 조인이 많이 발생해 부하를 일으킬 수 있다. 그때에 반정규화가 필요하다. 하지만 반정규화는 데이터 중복을 발생시키기 때문에 또다른 문제점들이 발생한다.

4. 반정규화

DB 성능 향상을 위해서 데이터 중복을 허용하고 조인을 줄이는 방법이다.

  • 반정규화가 필요한 경우

    • 반복된 정규화로 수행속도가 너무 느려진 경우
    • 다량의 범위를 자주 처리해야 하는 경우
    • 특정 범위의 데이터만 자주 처리하는 경우
    • 요약/집계 정보가 자주 요구되는 경우
  • 반 정규화가 아닌 방법으로 성능을 향상 시킬 수 있다.

    • 클러스터링
    • 인덱스 튜닝
    • 응용 프로그램
    • 파티션
  • 반정규화 기법

    • 계산된 칼럼 추가 - 계속해서 계산하면 부하가 걸리므로 미리 계산해놓은 값을 저장해놓는 칼럼을 추가한다.
    • 테이블 수직분할 - 칼럼을 분할하여 새로운 테이블 생성
    • 테이블 수평분할 - 값을 기준으로 테이블을 분할
    • 테이블 병합 - 테이블을 합쳐서 데이터 중복이 발생함에도 조회 성능을 향상시킨다.
  • 파티션 기법

    • Range Partition - 값의 범위 기준
    • List Partition - 특정한 값을 지정하여 파티션
    • Hash Partition - 해시 함수를 적용하여 파티션
    • Composite Partition - 범위와 해시를 함께 사용하여 파티션
  • 파티션의 장점

    • 엑세스 범위가 줄어들어 성능 향상
    • 데이터가 분할되어 I/O 성능 향상
    • 각 파티션을 독집적으로 백업 및 복구 가능

5. 분산 데이터베이스

물리적으로 떨어진 데이터베이스에 네트워크로 연결해서 단일 데이터베이스 인것처럼 보여주고 분산된 작업 처리를 수행하는 DB이다. 투명성은 분산 DB에서 중요한 요소이다.

  • 분산 데이터베이스 투명성의 종류

    • 분할 투명성 - 하나의 논리적 릴레이션이 여러 단편으로 분할되어 각 단편의 사본이 여러 시스템에 저장된 것을 인식하지 않아도 된다.
    • 위치 투명성 - 어디에 저장되어있는지 명시할 필요x
    • 지역 사상 투명성 - 각 지역 시스템 이름과 무관한 이름이 사용가능하다.
    • 중복 투명성 - DB 객체가 중복되어 존재해도 데이터 일관성이 유지
    • 장애 투명성 - 통신망에 이상이 생겨도 데이터의 무결성 보장
    • 병행 투명성 - 동시에 트랜잭션을 수행해도 결과에 이상 X
  • 분산 DB 설계 방식

    • 상향식 설계 방식 - 지역 스키마 => 전역스키마
    • 하향식 설계 방식 - 전역스키마 => 지역 사상 스키마
  • 분산 데이터베이스의 장점

    • 신뢰성과 가용성이 높다
    • 병렬처리로 속도가 빠르다
    • 시스템 용량 확장이 쉽다.
  • 분산 데이터베이스의 단점

    • 관리 통제가 어렵다.
    • 보안 관리가 어렵다.
    • 무결성 관리가 어렵다.
    • 설계가 복잡하다.

보너스 용어 정리

  1. 카디널리티 : 하나의 릴레이션에서 튜플의 전체 개수
  2. 선택도 : 특정 조건에 의해서 선택될 것으로 예상되는 레코드의 비율.
  3. 인조 식별자 : 최대한 범용적인 값을 사용해서 만든 식별자로 유일한 값을 만들기 위한 것이다. 인조 식별자는 하나의 인조 속성을 다른 것을 대체 불가하다.

Written by@[Ykss]
고이게 두지 않고 흘려보내는 개발자가 되자.

GitHubInstagramLinkedIn