[데이터베이스 구축] 정규화, 반정규화

thingzoo·2024년 2월 8일
0
post-thumbnail

정규화

개념

  • 관계형 데이터베이스의 설계에서 데이터 중복을 최소화하기 위한 과정
  • 하나의 종속성이 하나의 릴레이션에 표현될 수 있도록 분해해가는 과정
  • 데이터베이스의 논리적 설계 단계에서 수행

목적⭐️

(20.8)

  • 데이터 구조의 안정성 및 무결성 유지
  • 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함
  • 효과적인 검색 알고리즘 생성 가능
  • 데이터 중복 최소화이상 현상/저장용량 최소화
  • 개체와 속성의 누락 여부 확인 가능
  • 데이터 삽입 시 릴레이션을 재구성할 필요성 줄임
  • 개체 간 관계 파악 용이
  • 독립적인 관계는 별개의 릴레이션로 표현

장단점

  • 장점
    • 중복 데이터 최소화
    • 저장 공간 효율적 활용
    • 이상 현상 제거
  • 단점
    • 처리 복잡성 증가
    • 실행 속도 저하
    • 참조 무결성 유지에 추가 노력 필요
    • JOIN 연산 필요성 증가

이상(Anomaly) 현상⭐️

  • 데이터 중복으로 인해 릴레이션 조작 시 발생하는 예기치 않은 문제점(20.8)

이상의 종류

  • 삽입 이상: 데이터를 삽입할 때 불필요한 데이터가 함께 삽입되는 현상
  • 삭제 이상: 한 튜플을 삭제할 때 연쇄 삭제 연상으로 인해 정보 손실
  • 갱신 이상: 튜플의 속성값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상

함수적 종속(Functional Dependency)⭐️

  • X→Y : X를 알면 Y를 바로 식별할 수 있고 X에 의해 Y가 달라질 때, Y는 X에 함수적 종속이라고 함

완전 함수적 종속

  • 종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을 때, 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우
  • 예: 회원번호 + 주문번호 → 강의명

부분 함수적 종속

  • 기본키가 여러 속성으로 구성되어 있을 때, 기본키를 구성하는 속성 중 일부만 종속되는 경우
  • 예: 회원번호 + 주문번호 → 이름

이행적 함수 종속

(20.6,8)

  • X→Y, Y→Z 이란 종속 관계가 있을 때, X→Z가 성립되는 경우
  • 예: 회원번호 → 주민번호, 주민번호 → 이름, ∴ 회원번호 → 이름

정규화 과정⭐️⭐️

모든 정규형은 이전 단계를 모두 만족해야함

(20.6,8)

제1정규형(1NF)

  • 만족 조건: 릴레이션에 속한 모든 도메인이 원자값(Atomic Value; 하나의 값)만으로 되어있다.
  • 예시
    • 비정규 릴레이션:
    • 1NF 만족 릴레이션:

제2정규형(2NF)

  • 만족 조건: 부분 함수적 종속을 모두 제거하여 완전 함수적 종속으로 만든다.
  • 예시
    • 비정규 릴레이션:
    • 2NF 만족 릴레이션:

제3정규형(3NF)

  • 만족 조건: 이행적 함수 종속을 제거한다.
  • 예시
    • 비정규 릴레이션:
    • 3NF 만족 릴레이션:

보이스/코드 정규형(BCNF)

  • 제3정규형을 좀 더 강화한 버전
  • 만족 조건: 릴레이션에서 모든 결정자가 후보키가 되도록 한다.
  • 예시
    • 비정규 릴레이션:
    • BCNF 만족 릴레이션:

제4정규형(4NF)

  • 만족 조건: 다치 종속을 제거한다.

제5정규형(5NF)

  • 만족 조건: 조인 종속을 제거한다.

반정규화/역정규화(Denormalization)

  • 시스템의 성능 향상, 개발 및 운영의 편의성을 위해 정규화된 데이터모델을 의도적으로 통합, 중복, 분리하는 기법
  • 정규화로 인한 여러 테이블의 조인이 성능 저하를 일으킬 때 사용
    • 자주 함께 조인되는 테이블들을 역정규화하여 조인 경로를 줄일 수 있음
  • 데이터의 일관성 및 정합성이 저하될 수 있음

반정규화의 유형(방법)

(20.6)

테이블 분할

  • 수평분할(레코드 단위), 수직분할(컬럼 단위) → 기본키의 유일성 관리가 어려워짐

테이블 중복

  • 집계(통계) 테이블 추가, 진행 테이블 추가, 특정 테이블 추가

컬럼 기반 분할

  • 조회 빈도 기반, 크기 기반 분할

컬럼 중복

  • 중복 컬럼 추가, 파생 컬럼 추가

사진 출처

https://mangkyu.tistory.com/110

profile
공부한 내용은 바로바로 기록하자!

0개의 댓글