SeaForest

[SQL] 정규화, 반정규화 본문

SQL

[SQL] 정규화, 반정규화

seaforest 2023. 4. 9. 23:07

1. 정규화란

  • 정규화 데이터베이스는 중복을 최소화하도록 설계된 데이터베이스
  • 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법
  • 관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 작업 
  • 하나의 종속성이 하나의 릴레이션에 표현될 수 있도록 분해하는 과정 
  • 데이터를 분해하는 과정 
    • 중복 데이터를 저장하면서 일으키는 문제점을 없애기 위해 정보를 주제별로 분할하는 프로그램
    • 중복으로 데이터를 저장하면 일관되지 않은 데이터, 비정상적인 삽입 갱신 삭제 처리, 디스크 공간 낭비 등 많은 문제를 일으킴
  • 정규화를 하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거됨
  • 이상현상(Anomaly)를 해결하기 위해서는 데이터를 분해해야함
    • 이상현상(Anomaly)란?
    • <ex> 직원정보 테이블

→ 새로운 직원이 추가되는 경우, 부서 정보가 없으면 부서코드를 임의의 값으로 넣어야함

→ 새로운 부서가 추가되는 경우, 사원 정보가 없기 때문에 임의의 값으로 사원번호를 입력하거나 추가할 수 없게됨

그러므로, 이런 문제를 해결하기 위해서는 테이블을 분해하는 작업이 필요함, 즉 정규화가 필요함

 

2. 정규화의 장점과 단점

  • 장점
    • DB 변경시 이상현상(Anomaly) 제거
    • 저장 공간의 최소화 (용량 감소)
    • 데이터 구조의 안정성 및 무결성 유지
    • 데이터 삽입, 삭제 및 수정 시 테이블의 재구성 필요성 감소
  • 단점
    • 릴레이션 간의 JOIN 연산 증가로 인해 응답 시간 저하

 

3. 정규화 종류

3-1. 제1정규화 (First Normal Form)

  • 제1정규화란
    • 테이블의 칼럼이 원자값(Atomic value, 하나의 값)을 갖도록 테이블을 분해하는 것
  • 제1정규형을 만족하지 못하는 예

  • 제1정규화를 진행한 테이블

  • 한 칼럼에는 하나의 값만 있어야함

 

3-2. 제2정규화 (Second Normal Form)

  • 제1정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것
    • 완전 함수 종속이란?
      • 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미함
  • 제2정규형을 만족하지 못하는 예시

  • 제2정규화를 진행한 테이블

 

 

 

3-3. 제3정규화 (Third Normal Form)

  • 제2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것
    • 이행적 종속이란?
      • A → B, B → C 가 성립할 때, A → C가 성립되는 것을 의미
      • 일반 속성이 다른 일반 속성에 종속되는 것
  • 제3정규형을 만족하지 못하는 예시

  • 제3정규화를 진행한 테이블
    ('매장정보'와 '판매량'으로 테이블 분해)

 

 

 

4. 반정규화

  • 의도적으로 정규화 원칙을 위배하는 행위
  • 데이터베이스의 성능 향상을 위해, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법
  • 조회 속도를 향상 시키지만, 데이터 모델의 유연성은 낮아짐
  • 조회 성능을 향상 시키기 위해 데이터 중복을 허용하거나 데이터를 그룹핑 하는 과정
  • 정규화가 끝난 후 성능 이슈가 있을 때 가지는 과정이며, 정규화처럼 일정한 규칙 존재
  • 성능을 향상시키기 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정
  • 반정규화 대상
    • 수행 속도가 많이 느린 경우
    • 테이블의 조인 연산을 지나치게 사용하여 데이터를 조회하는 것이 기술적으로 어려운 경우
    • 테이블에 많은 데이터가 있고, 다량의 범위 혹은 특정 범위를 자주 처리해야 하는 경우

 

5. 반정규화의 장점과 단점

  • 장점
    • 데이터를 빠르게 조회할 수 있음
    • 조인을 제거하기 때문에 검색 시간이 최적화
  • 단점
    • 데이터의 삽입, 삭제, 수정 등 갱신 시 비용이 높아짐
    • 데이터간의 일관성이 깨질 수 있음 (서로 다른 데이터가 저장될 수 있음)
    • 많은 저장 공간이 필요함

 

[레퍼런스]

https://velog.io/@majaeh43/SQL-normalization%EC%A0%95%EA%B7%9C%ED%99%94%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

 

SQL normalization(정규화)란 무엇인가?

정규화!

velog.io

 

https://kkh0977.tistory.com/271

 

6. (DB/데이터베이스) 정규화 (Normalized), 반정규화 (Denormalization) 설명 및 장점,단점 분석 실시

/* =========================== */ [ 설 명 ] ​ 과목 : DataBase / 데이터베이스 ​/* =========================== */ ​ [정규화 (Normalized) 란?] - 정규화란 관계형 데이터베이스에서 중복을 최소화하기 위해 데이터를

kkh0977.tistory.com

https://superohinsung.tistory.com/111

 

[DataBase] 정규화(1NF, 2NF, 3NF, BCNF)

정규화(Normalization) 정규화란 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 구분하

superohinsung.tistory.com

 

 

'SQL' 카테고리의 다른 글

Oracle 날짜 함수  (0) 2024.08.11
SQL 쿼리 가독성 높이기  (1) 2024.01.07
[SQL] DELETE vs TRUNCATE vs DROP  (0) 2022.10.13
[SQL] MySQL 기본 명령어  (0) 2022.10.05
[SQL] NULL값 처리 함수  (0) 2022.08.13