자격증/SQLD

[SQLD] - 정규화와 반정규화, 트랜잭션 이해하기

ro-jun 2025. 2. 23. 20:48
728x90
반응형
데이터베이스 이상현상이란?
  • 정규화되지 않은 테이블에 데이터를 삽입, 수정, 삭제할 때 데이터의 일관성이 깨지는 현상
  • 주요 이상현상: 삽입 이상, 갱신 이상, 삭제 이상\

1. 삽입 이상 (Insertion Anomaly)

  • 데이터를 추가할 때, 불필요한 정보까지 삽입해야 하는 문제
  • 예) 신규 직원 정보를 입력하려는데, 해당 직원이 아직 프로젝트를 배정받지 않았다면 NULL 값 처리가 어려워 삽입 불가능

2. 갱신 이상 (Update Anomaly)

  • 데이터를 수정할 때, 일부만 갱신되거나 중복 데이터가 있어 일관성이 깨지는 문제
  • 예) 직원이 소속된 부서명을 변경해야 하는데, 여러 개의 행에서 일부만 변경되면 데이터 불일치 발생

3. 삭제 이상 (Deletion Anomaly)

  • 데이터를 삭제할 때, 의도하지 않은 정보까지 삭제되는 문제
  • 예) 직원 정보와 부서 정보가 같은 테이블에 있을 때, 특정 직원을 삭제하면 해당 부서 정보도 같이 삭제됨
정규화란?
  • 데이터베이스 이상현상을 해결하기 위해 테이블을 구조적으로 정리하는 과정
  • 정규화를 진행하면 삽입, 삭제, 수정 성능이 향상되지만, 조회 성능이 하락할 수 있음
  • 정규화의 핵심 개념: 함수 종속성 제거

1. 제1정규형 (1NF) - 속성의 원자성 확보

  • 하나의 속성 값에는 한 개의 값만 존재해야 함
  • 중복된 속성을 제거하고, 반복되는 데이터를 별도 테이블로 분리

2. 제2정규형 (2NF) - 부분 함수 종속성 제거

  • 부분 함수 종속성: 일반 속성이 주식별자의 일부에만 종속되는 경우
  • 해결 방법: 부분 함수 종속성을 가진 속성을 별도의 테이블로 분리

3. 제3정규형 (3NF) - 이행 함수 종속성 제거

  • 이행 함수 종속성: 일반 속성이 다른 일반 속성에 종속되는 경우
  • 해결 방법: 일반 속성 간의 종속성을 제거하고 테이블을 분리
조인(JOIN)이란?

 

  • 정규화로 인해 여러 개의 테이블로 분리된 데이터를 하나로 합치는 연산
  • 조회 성능을 높이기 위해 반정규화(Denormalization) 적용 가능

 

반정규화(Denormalization)란?

 

  • 정규화를 거쳐 조인이 많아진 테이블을 최적화하기 위해 일부 구조를 수정하는 과정
  • 조회 성능 향상 및 관리 편의성을 높이기 위해 적용

1. 테이블 반정규화

(1) 테이블 병합

  • 1:1 관계 병합: 테이블을 하나로 합쳐 조회 성능 향상
  • 1:N 관계 병합: 자식 테이블 데이터를 부모 테이블에 포함
  • 슈퍼타입/서브타입 병합: 여러 개의 테이블을 하나로 통합

(2) 테이블 분할

  • 수직 분할: 테이블의 컬럼을 분할하여 관리
  • 수평 분할(파티셔닝): 데이터 양이 많을 경우 특정 기준으로 행을 나눠 성능 최적화

(3) 테이블 추가

  • 중복 테이블: 자주 사용하는 데이터를 별도 테이블로 저장
  • 통계 테이블: 요약된 통계 정보를 저장
  • 이력 테이블: 데이터 변경 내역을 별도로 저장
  • 부분 테이블: 일부 데이터를 분리하여 관리

2. 칼럼 반정규화

  • 중복 칼럼 추가: 조인을 줄이기 위해 동일한 데이터를 중복 저장
  • 파생 칼럼 추가: 계산된 값을 저장하여 성능 향상
  • 이력 테이블 칼럼 추가: 변경된 값을 저장하는 칼럼 추가
  • PK에 의한 칼럼 추가: 조회 최적화를 위해 PK를 포함한 칼럼 추가
  • 이전 데이터 칼럼 추가: 최근 데이터를 쉽게 조회할 수 있도록 추가

3. 관계 반정규화

  • 중복된 관계를 맺어 조회 성능 향상

 

트랜잭션(Transaction)이란?
  • 한 번에 수행되어야 하는 논리적인 작업 단위
  • 데이터의 일관성과 무결성을 유지하기 위해 사용

1. TCL (Transaction Control Language) - 트랜잭션 관련 SQL 명령

  • COMMIT: 변경된 데이터를 영구적으로 저장
  • ROLLBACK: 변경된 데이터를 취소
  • SAVEPOINT: 특정 시점까지의 변경 사항을 저장하고, 필요 시 해당 시점으로 되돌릴 수 있도록 함

2. 트랜잭션의 특징 (ACID)

  1. 원자성(Atomicity): 트랜잭션 내의 작업이 모두 성공하거나, 모두 실패해야 함
  2. 일관성(Consistency): 데이터가 트랜잭션 전후로 일관성을 유지해야 함
  3. 고립성(Isolation): 하나의 트랜잭션이 실행되는 동안 다른 트랜잭션이 영향을 미치지 않음
  4. 영속성(Durability): 트랜잭션이 성공적으로 완료되면, 결과가 영구적으로 저장됨
NULL이란?
  • 입력되지 않은 값으로, 연산 시 주의해야 함

1. 단일행 연산에서의 NULL

  • NULL과 연산하면 결과는 항상 NULL

2. 다중행 연산에서의 NULL

  • NULL 값은 제외하고 연산 수행
식별자(Identifier)란?
  • 엔터티의 각 인스턴스를 고유하게 식별하는 속성

1. 본질 식별자 (Natural Key, 원조 식별자)

  • 실제 업무에서 원래 존재하는 속성을 이용하여 식별자 지정

2. 인조 식별자 (Surrogate Key, 대리 식별자)

  • 시퀀스나 키 제약조건을 통해 인위적으로 생성한 식별자
  • 추가적인 연산 없이 일관성을 유지할 수 있도록 설계됨
정리

 

  • 정규화는 데이터 이상현상을 방지하기 위해 테이블을 구조적으로 정리하는 과정
  • 조인은 정규화된 테이블을 다시 결합하여 조회 성능을 향상시키는 기법
  • 반정규화는 조인 비용을 줄이기 위해 테이블 구조를 최적화하는 과정
  • 트랜잭션은 데이터의 일관성을 유지하는 논리적 작업 단위

 

728x90
반응형