본문 바로가기

DB/SQLD

[SQLD] 데이터 모델과 SQL

데이터 정규화

데이터 정합성 위해 엔터티 작은 단위로 분리하는 과정

  • 데이터 입력, 수정, 삭제 성능 향상
  • 데이터 조회 성능 저하 가능성 존재

제 1 정규형

  • 다중값 속성 제거
  • → 모든 속성이 단일값만 가짐

제 2 정규형

  • 주식별자가 복합식별자인 경우 (속성들의 집합이 주식별자를 이루는 경우)
  • 부분적 함수 종속 제거
    • 부분적 함수 종속
    • → 일반속성이 주식별자의 일부에만 종속되는 경우

제 3 정규형

  • 이행적 함수 종속 제거
    • 이행적 함수 종속
    • → 주식별자가 아닌 속성간의 종속 관계

주의 사항

  • 정규화 결과 JOIN 연산 증가로 인한 성능 저하 발생 가능
  • → 반정규화 통해 성능 개선 가능

 

반정규화

데이터 조회 성능 향상 위해 데이터 중복 허용 또는 데이터 그룹핑하는 과정

  • 데이터 조회 성능 향상
  • 데이터 입력, 수정, 삭제 성능 저하 가능성 존재
  • 데이터 정합성 문제 발생 가능
  • 반정규화 과정은 정규화가 모두 끝난 후 진행

테이블 반정규화

  • 테이블 병합
    • 1:1 관계 테이블 병합
    • 1:m 관계 테이블 병합
      • 중복 데이터 생길 수 있음
    • 슈퍼 서브 타입 테이블 병합
  • → JOIN 연산 필요한 경우 많아 테이블 통합이 성능 측면에서 유리한 경우
  • 테이블 분할
    • 테이블 수직 분할
      • 엔터티의 일부 속성 별도의 엔터티로 분할
      • 자주 사용하지 않거나 속성값의 대부분 NULL값인 경우 고려
    • 테이블 수평 분할
      • 인스턴스를 기준에 따라 파티셔닝
      • 데이터를 물리적으로 분리함
  • 테이블 추가
    • 중복 테이블 추가
    • 통계 테이블 추가
    • 이력 테이블 추가
    • 부분 테이블 추가
      • 일부 정보만 자주 사용되는 경우 사용

컬럼 반정규화

  • 중복 컬럼 추가
  • 파생 컬럼 추가
  • 이력 테이블 컬럼 추가

관계 반정규화

  • 중복 관계 추가해 성능 향상
  • JOIN 연산 많이 필요한 경우 사용

 

트랜잭션

데이터 조작 위한 하나의 논리적 작업 단위

  • 분리될 수 없는 작업 단위

💡특성

Atomicity, 원자성

  • all or nothing
    • 트랜잭션에 속한 모든 연산이 모두 실행 또는 하나도 실행되지 않아야함
    • 연산들의 부분적 실행 허용되지 않음
    • 연산이 분리될 수 없음
  • 트랜잭션 수행 도중 장애 발생 → 모든 연산 수행 완료 불가
    • 장애 발생 전 실행된 모든 연산 결과 취소
    • DB를 트랜잭션 수행 이전으로 되돌림

Consistency, 일관성

  • 트랜잭션의 수행 후에도 DB가 일관된 상태 유지
    • 일관된 상태 - 데이터베이스에 오류 없는 상태, 내용에 모순 없는 상태

Isolation, 격리성

  • 수행중인 트랜잭션이 완료될 때까지 다른 트랜잭션이 중간 결과에 접근 불가
  • 여러 트랜잭션 동시 실행되어도 순차 실행된 결과와 동일해야함
    • 트랜잭션 수행 순서 관계 없이 동일한 결과 반영

Durability, 지속성

  • 트랜잭션의 완료 후 DB에 반영한 결과는 영구적

 

NULL

값이 존재하지 않음

  • 0과 같지 않음
  • 데이터가 입력되지 않은 상태

연산

  • 가로 연산 (한 인스턴스 내 연산)
    • NULL값 포함된 속성 있는 경우 결과값 NULL
  • 세로 연산 (다른 인스턴스와 연산)
    • NULL값 제외 후 연산

'DB > SQLD' 카테고리의 다른 글

[SQLD] 데이터 모델링이란?  (1) 2024.01.09