JUINTINATION

정규화(Normalization)와 반정규화(Denormalization) 본문

정보처리기사 정리

정규화(Normalization)와 반정규화(Denormalization)

DEOKJAE KWON 2024. 2. 15. 23:48
반응형

정규화란?

함수적 종속성 등의 종속성 이론을 이용하여 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어가는 과정

  • 하나의 종속성이 하나의 릴레이션에 표현될 수 있도록 분해해가는 과정이라 할 수 있음
  • 데이터베이스의 논리적 설계 단계에서 수행하며 논리적 처리 및 품질에 큰 영향을 미침
  • 정규화된 데이터 모델은 일관성, 정확성, 단순성, 비중복성, 안정성 등을 보장
  • 정규화 수준이 높을수록 유연한 데이터 구축이 가능하며 데이터의 정확성이 높아지는 반명 물리적 접근이 복잡하고 너무 많은 조인으로 인해 조회 성능이 저하됨

정규화의 목적

  • 데이터 구조의 안정성 및 무결성 유지
  • 효과적인 검색 알고리즘 생성 가능
  • 데이터 중복을 배제하여 이상(Anomaly)의 발생 방지 및 자료 저장 공간의 최소화 가능
  • 데이터 삽입 시 릴레이션을 재구성할 필요성을 줄임
  • 데이터 모형의 단순화 가능
  • 속성의 배열 상태 검증 가능
  • 개체와 속성의 누락 여부 확인 가능

이상(Anomaly)의 개념 및 종류

  • 삽입 이상(Insertion Anomaly)
    • 릴레이션에 데이터를 삽입할 때 의도와는 상관없이 원하지 않는 값들도 함께 삽입되는 현상
  • 삭제 이상(Deletion Anomaly)
    • 릴레이션의 한 튜플을 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 연쇄가 일어나는 현상
  • 갱신 이상(Update Anomaly)
    • 릴레이션에서 튜플에 있는 속성값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보에 모순이 생기는 현상

정규화의 원칙

  • 정보의 무손실 표현, 즉 하나의 스키마를 다른 스키마를 변혼할 때 정보의 손실이 있어서는 안 된다.
  • 분리의 원칙, 즉 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리시켜 표현해야 한다.
  • 데이터의 중복성이 감소되어야 한다.

정규화 과정

  • 1NF(제1정규형)
    • 릴레이션의 모든 속성 값이 원자 값으로만 되어 있는 정규형
  • 2NF(제2정규형)
    • 릴레이션 R이 1NF이고 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족하는 정규형
  • 3NF(제3정규형)
    • 릴레이션 R이 2NF이고 기본키가 아닌 모든 속성이 기본키에 대하여 이행적 종속을 만족하지 않는 정규형
  • BCNF(Boyce-Codd 정규형)
    • 릴레이션 R에서 결정자가 모두 후보키(Candidate Key)인 정규형
    • 3NF에서 후보키가 여러 개 존재하고 서로 중첩되는 경우에 적용하는 강한 제3정규형이라고도 하며 모든 BCNF가 종속성을 보존하는 것은 아니다.
    • BCNF의 제약 조건
      • 키가 아닌 모든 속성은 각 키에 대해 완전 종속해야 한다.
      • 키가 아닌 모든 속성은 그 자신이 부분적으로 들어가 있지 않은 모든 키에 대해 완전 종속해야 한다.
      • 어떤 속성도 키가 아닌 속성에 대해서는 완전 종속할 수 없다.
  • 4NF(제4정규형)
    • 릴레이션 R에 다치 종속 A->>B가 성립하는 경우 R의 모든 속성이 A에 함수적 종속 관계를 만족하는 정규형
  • 5NF(제5정규형, PJ/NF)
    • 릴레이션 R의 모든 조인 종속이 R의 후보키를 통해서만 성립되는 정규형

반정규화란?

시스템의 성능 향상, 개발 및 운영의 편의성 등을 위해 정규화된 데이터 모델을 통합, 중복, 분리하는 과정으로 의도적으로 정규화 원칙을 위배하는 행위

  • 과도한 반정규화는 오히려 성능을 저하시킬 수 있음
  • 반정규화를 위해 사전에 데이터의 일관성과 무결성을 우선으로 할지, 데이터베이스의 성능과 단순화를 우선으로 할지를 결정해야 함

테이블 통합

두 개의 테이블이 조인(Join)되는 경우가 많아 하나의 테이블로 합쳐 사용하는 것이 성능 향상에 도움이 될 경우에 수행

  • 테이블 통합의 종류에는 1:1 관계 테이블 통합, 1:N 관계 테이블 통합, 슈퍼타입/서브타입 테일블 통합이 있음
    • 슈퍼타입은 상위 개체를, 서브타입은 하위 개체를 의미
  • 테이블 통합 시 고려 사항
    • 데이터 검색은 간편하지만 레코드 증가로 인해 처리량이 증가함
    • 테이블 통합으로 인해 입력, 수정, 삭제 규칙이 복잡해질 수 있음
    • Not Null, Default, Check 등의 제약조건을 설계하기 어려움

테이블 분할

테이블을 수직 또는 수형으로 분할하는 것

  • 테이블 분할 시 고려 사항
    • 기본키의 유일성 관리가 어려워짐
    • 데이터 양이 적거나 사용 빈도가 낮은 경우 테이블 분할이 필요한지를 고려해야 함
    • 분할된 테이블로 인해 수행 속도가 느려질 수 있음
    • 데이터 검색에 중점을 두어 테이블 분할 여부를 결정해야 함

수평 분할(Horizontal Partitioning)

레코드(Record)를 기준으로 테이블을 분할하는 것

  • 레코드별로 사용 빈도의 차이가 큰 경우 사용 빈도에 따로 테이블을 분할

수직 분할(Vertical Partitioning)

속성(Attribute)을 기준으로 테이블을 분할하는 것

  • 갱신 위주의 속성 분할
    • 데이터 갱신 시 레코드 잠금으로 인해 다른 작업을 수행할 수 없으므로 갱신이 자주 일어나는 속성들을 수직 분할
  • 자주 조회되는 속성 분할
    • 테이블에서 자주 조회되는 속성이 극히 일부일 경우 자주 사용되는 속성들을 수직 분할
  • 크기가 큰 속성 분할
    • 이미지나 2GB 이상 저장될 수 있는 텍스트 형식 등으로 된 속성들을 수직 분할
  • 보안을 적용해야 하는 속성 분할
    • 테이블 내의 특정 속성에 대해 보안을 적용해야 하는 속성들을 수직 분할

중복 테이블 추가

여러 테이블에서 데이터를 추출해서 사용해야 하거나 다른 서버에 저장된 테이블을 이용해야 하는 경우 중복 테이블을 추가하여 작업의 효율성을 향상시키기 위해 사용

  • 많은 범위의 데이터를 자주 처리해야 하는 경우
  • 특정 범위의 데이터만 자주 처리해야 하는 경우
  • 처리 범위를 줄이지 않고는 수행 속도를 개선할 수 없는 경우

중복 테이블을 추가하는 방법은 다음과 같다.

  • 집계 테이블의 추가
    • 집계 데이터를 위한 테이블을 생성하고 각 원본 테이블에 트리거(Trigger)를 설정하여 사용
    • 트리거의 오버헤드(Overhead)에 유의해야 함
  • 진행 테이블의 추가
    • 이력 관리 등의 목적으로 추가하는 테이블
    • 적절한 데이터 양의 유지와 활용도를 높이기 위해 기본키를 적절히 설정해야 함
  • 특정 부분만을 포함하는 테이블의 추가
    • 데이터가 많은 테이블의 특정 부분만을 사용하는 경우 해당 부분만으로 새로운 테이블을 생성

중복 속성 추가

조인해서 데이터를 처리할 때 데이터를 조회하는 경로를 단축하기 위해 자주 사용하는 속성을 하나 더 추가하는 것

  • 중복 속성을 추가하는 경우
    • 조인이 자주 발생하는 속성인 경우
    • 접근 경로가 복잡한 속성인 경우
    • 액세스의 조건으로 자주 사용되는 속성인 경우
    • 기본키의 형태가 적절하지 않거나 여러 개의 속성으로 구성된 경우
  • 중복 속성 추가 시 고려 사항
    • 테이블 중복과 속성의 중복을 고려한다.
    • 데이터 일관성 및 무결성에 유의해야 한다.
    • SQL 그룹 함수를 이용하여 처리할 수 있어야 한다.
    • 저장 공간의 지나친 낭비를 고려한다.
728x90

'정보처리기사 정리' 카테고리의 다른 글

DBMS와 ORM  (0) 2024.02.16
트랜잭션 및 CRUD 분석  (0) 2024.02.16
관계대수 및 관계해석  (0) 2024.02.15
관계형 데이터베이스  (0) 2024.02.15
E-R(개체-관계) 모델과 관계형 데이터 모델  (0) 2024.02.15
Comments