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

2024. 10. 13. 18:26·Category/정보처리기사
728x90

정규화와 반정규화는 데이터베이스 설계에서 데이터 구조를 효율적으로 관리하기 위한 두 가지 상반된 기법입니다. 각 기법의 목적과 특징을 비교하여 설명하겠습니다.

정규화(Normalization)

정규화는 데이터의 중복을 제거하고, 데이터 무결성을 유지하며, 데이터를 구조적으로 효율적으로 설계하기 위한 기법입니다. 정규화를 통해 데이터베이스는 더 간결하고 일관되게 설계되며, 데이터 중복으로 인한 불필요한 저장 공간 사용을 줄일 수 있습니다.

정규화의 목적:

  1. 데이터 중복 제거: 데이터를 중복 없이 효율적으로 관리하여 데이터 저장 공간을 줄이고 일관성을 유지합니다.
  2. 데이터 무결성 유지: 중복된 데이터로 인해 발생할 수 있는 갱신 이상, 삭제 이상, 삽입 이상을 방지합니다.
  3. 데이터베이스 구조의 간결성: 복잡한 데이터를 더 잘 관리할 수 있는 구조로 쪼개서 테이블 간의 관계를 정의합니다.

정규화의 단계:

  1. 1NF (제1정규형): 모든 속성의 값이 원자값(하나의 값)을 가져야 하며, 중복된 데이터는 허용되지 않습니다.
  2. 2NF (제2정규형): 1NF를 만족하면서 부분 함수 종속을 제거하여 모든 비주요 속성이 기본 키에 완전하게 종속되도록 합니다.
  3. 3NF (제3정규형): 2NF를 만족하면서 이행적 함수 종속을 제거하여 비주요 속성 간의 종속성을 없앱니다.

정규화의 단점:

  • 지나치게 정규화를 하면 테이블이 너무 많이 분리되면서, 복잡한 조인이 필요해져 조회 성능이 저하될 수 있습니다.

반정규화(Denormalization)

반정규화는 정규화된 테이블을 일부 통합하거나 데이터를 중복시켜 성능을 향상시키기 위한 기법입니다. 정규화된 데이터베이스는 데이터 무결성과 중복을 최소화하는 반면, 반정규화는 성능 향상을 위해 이러한 구조를 완화합니다.

반정규화의 목적:

  1. 성능 향상: 정규화로 인해 발생할 수 있는 복잡한 조인을 줄이고, 조회 속도를 높이기 위해 일부 데이터 중복을 허용합니다.
  2. 개발 및 운영의 단순화: 정규화된 구조를 다시 통합하거나 일부 데이터를 중복 저장하여 쿼리 실행을 단순화하고, 시스템의 운영 효율성을 높이기 위함입니다.

반정규화 방법:

  • 테이블 통합: 자주 조인하는 두 개 이상의 테이블을 하나로 합쳐서 조회 성능을 높이는 방법.
  • 중복 데이터 저장: 동일한 데이터를 여러 테이블에 중복 저장하여, 조회 시 빠르게 데이터를 검색할 수 있도록 하는 방법.
  • 계산된 값 추가: 자주 계산되는 값(예: 합계, 평균 등)을 테이블에 미리 저장하여, 매번 계산하지 않고 조회할 수 있도록 하는 방법.

반정규화의 단점:

  • 데이터 중복으로 인해 데이터 무결성 유지가 어려울 수 있습니다. (예: 한 데이터가 여러 테이블에 저장되면, 모든 테이블에서 동기화가 필요)
  • 데이터 수정 시 관리가 복잡해질 수 있습니다.

정리

  • 정규화: 데이터 중복을 최소화하고 무결성을 유지하기 위한 기법. 성능은 떨어질 수 있지만, 데이터의 일관성을 유지하고 이상 현상을 방지하는 장점이 있습니다.
  • 반정규화: 성능 향상과 단순화를 위해 데이터를 중복하거나 테이블을 통합하는 기법. 성능은 향상되지만, 중복 데이터로 인해 데이터 무결성 유지가 어렵고 관리가 복잡해질 수 있습니다.

예시

정규화된 테이블 구조:

  • 학생(학생ID, 이름, 학과ID)
  • 학과(학과ID, 학과명)

반정규화된 테이블 구조:

  • 학생(학생ID, 이름, 학과ID, 학과명)
    (학과명 데이터가 중복되지만, 조회 속도가 향상됨)

이처럼 정규화와 반정규화는 각각 데이터 무결성과 성능 최적화라는 목적을 위해 선택적으로 사용됩니다.

728x90

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

DB 설계 절차 정리  (0) 2024.10.14
WSDL (Web Services Description Language)란?  (0) 2024.10.13
애드혹 네트워크(Ad-hoc Network)란?  (1) 2024.10.13
응집도(Cohesion)란?  (0) 2024.10.13
패킷 교환 방식(Packet Switching)이란?  (0) 2024.10.13
'Category/정보처리기사' 카테고리의 다른 글
  • DB 설계 절차 정리
  • WSDL (Web Services Description Language)란?
  • 애드혹 네트워크(Ad-hoc Network)란?
  • 응집도(Cohesion)란?
Corinee
Corinee
  • Corinee
    Coding Note
    Corinee
  • 전체
    오늘
    어제
    • 분류 전체보기 (361) N
      • Category (354)
        • Algorithm (7)
        • SQL (2)
        • Java (4)
        • C (9)
        • React (7)
        • JavaScript (9)
        • CSS (2)
        • Node (1)
        • SpringBoot (26)
        • Database (3)
        • Network (1)
        • Django (6)
        • Python (22)
        • Flask (4)
        • iOS (25)
        • Swift (4)
        • Flutter (11)
        • Dart (3)
        • Git (1)
        • Firebase (1)
        • Gof (1)
        • 정보처리기사 (112)
        • AI (5)
        • NestJs (4)
        • Docker (1)
        • 사이드 프로젝트 (1)
        • Note (80)
        • Socket (1)
        • 개인 정보 처리 방침 (1)
        • 면접 (0)
        • Vue.js (0)
      • Archive (2) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    react
    stdlib.h
    중첩 함수(nested function)
    inp
    프로세스 강제 종료
    chrome extension 자동 배포
    jackson 라이브러리
    public vs assets
    Collections
    mermaid-cli
    math.h
    x.y.z (메이저.마이너.패치)
    named export vs default export
    react router
    mcp server
    defaultdict
    semver)
    intellij 콘솔 한글 깨짐
    useEffect
    Jest
    원시값(primitive)
    시맨틱 버전(semantic versioning
    structuredclone()
    ajax (asynchronous javascript and xml)
    counter
    styled-components
    소프트웨어 버전 관리
    쉽게 풀어쓴 C언어 Express
    json.parse(json.stringify())
    core web vitals
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Corinee
정규화(Normalization)와 반정규화(Denormalization)
상단으로

티스토리툴바