_won_
wonprogrammer
_won_
전체 방문자
오늘
어제
  • 분류 전체보기
    • woncoding
      • TIL
      • WIL
    • source Code
      • Python
      • Programmers
      • BAEKJOON

블로그 메뉴

  • 방명록

티스토리

Github · Wonprogrammer
hELLO · Designed By 정상우.
_won_

wonprogrammer

TIL | 1.19.목 [CS 기초지식 | 정규화]
woncoding/TIL

TIL | 1.19.목 [CS 기초지식 | 정규화]

2023. 1. 25. 15:50

정규화

- 정규화 란?

  • 관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상현상을 방지하고, 데이터의 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정이다.
  • 즉, 데이터 중복을 줄이기 위해 데이터베이스를 구성하고 구조화하는 프로세스

정규화(Normalization)의 기본 목표는 테이블 간에 중복된 데이터를 허용하지 않는다는 것이다. 

중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다.

 

+) 이상 현상이란?

데이터의 중복성으로 인해 릴레이션(테이블)을 조직할 때 발생하는 비합리적 현상이다.

  • 삽입 이상 : 정보 저장 시 해당 정보의 불필요한 세부정보까지 입력해야 하는 경우
  • 삭제 이상 : 정보 삭제시 원치 않는 다른 정보가 같이 삭제 되는 경우
  • 갱신 이상 : 중복 데이터 중 특정 부분만 수정되어 중복된 값이 모순을 일으키는 경우

 

정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다.

이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 단계별로 구분하여 정규형이 높아질수록 이상현상은 줄어들게 된다.

데이터베이스 정규화 프로세스는 모든 필드와 레코드가 논리적으로 구성되어 중복을 방지할 뿐만 아니라 관계형 데이터베이스를 보다 효율적으로 사용하도록 하는 방법이다.

 

- 정규화 장점

  • 데이터베이스 변경 시 이상 현상(Anomaly)을 제거할 수 있다.
  • 정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다.
  • 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되어 응용프로그램의 생명을 연장시킨다.
  • 데이터베이스 크기 감소 / 쿼리 단순화 / 유지 보수 용이 / 성능향상

 

- 정규화 단점

  • 릴레이션의 분해로 인해 릴레이션 간의 JOIN연산이 많아진다.
  • 질의에 대한 응답 시간이 느려질 수도 있다.
    • 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다. 따라서 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있다.
  • 만약 조인이 많이 발생하여 성능 저하가 나타나면 반정규화(De-normalization)를 적용할 수도 있다.

 

- 정규화 단계

1NF (1차 정규형)

  • 속성값은 원자값을 가지고 있어야 한다 (1개의 속성만 가지고 있어야 됨)

2NF (2차 정규형)

  • 부분 함수 종속 제거 (완전 함수적 종속 관계)
  • A→B , B→C : A→C 만족 ❌

3NF (3차 정규형)

  • 이행 함수 종속 제거 
  • 한 테이블의 A→B , B→C : A→C 관계 에서 A→B , B→C로 테이블 분리 후 A→C 관계 제거

BCNF (보이스 - 코드 정규화)

  • 결정자 후보키 없는 함수 삭제

4NF (4차 정규형)

  • 다치 종속 제거
  • 특정 속성값에 따라 선택적인 속성을 분리한다.
  • 1개의 릴레이션이 2개 이상의 종속관계를 갖고 있을때 분리해 준다.

5NF (5차 정규형)

  • 조인 종속 제거
  • 모든 속성에 대해 각각의 릴레이션을 만들어 준다.

 

 

- 반 정규화

반 정규화란? 정규화 된 데이터에 대해 성능 향상과 개발 운영의 단순화를 위해 중복, 통합, 분리 등을 수행 하는 데이터 모델링 기법이다.

  • 테이블 : 병합, 분할, 중복 테이블 추가
  • 컬럼 : 중복화
  • 관계 :  중복관계 추가

 

저작자표시 비영리 변경금지 (새창열림)

'woncoding > TIL' 카테고리의 다른 글

TIL | 1.23.월 [CS 기초지식 | CORS]  (0) 2023.01.25
TIL | 1.20.금 [CS 기초지식 | HTTP / HTTPS]  (0) 2023.01.25
TIL | 1.18.수 [CS 기초지식 | 트랜잭션]  (0) 2023.01.25
TIL | 1.17.화 [CS 기초지식 | Index]  (0) 2023.01.25
TIL | 1.16.월 [CS 기초지식 | Django 질의응답]  (1) 2023.01.16
    'woncoding/TIL' 카테고리의 다른 글
    • TIL | 1.23.월 [CS 기초지식 | CORS]
    • TIL | 1.20.금 [CS 기초지식 | HTTP / HTTPS]
    • TIL | 1.18.수 [CS 기초지식 | 트랜잭션]
    • TIL | 1.17.화 [CS 기초지식 | Index]
    _won_
    _won_
    Coding Practice blog

    티스토리툴바