Database

[DB] 정규화 & 비정규화

dalgorithm 2022. 10. 7. 10:17
728x90

 


DB 정규화 (Normalization) 란?

 

데이터베이스 정규화는 관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상 현상을 방지하고,

데이터의 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정이다.

 

 

 데이터베이스 정규화 목적

 

  1. 중복 데이터를 최소화하여 테이블 불일치 위험 최소화
  2. 수정, 삭제 시 이상 현상 최소화함으로써 데이터 구조의 안정성 최대화
  3. 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능
  4. 데이터 삽입 시 릴레이션 재구성에 대한 필요성 줄이기
  5. 효과적인 검색 알고리즘 생성

 

|     이상 현상이란?

이상 현상은 릴레이션 조작 시 데이터들이 불필요하게 중복되어 예기치 않게 발생하는 문제 현상

 

|     이상 현상의 종류

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

 

 

 

 데이터베이스 정규화 단계

 

단계 조건
1정규형 (1NF) 원자 값으로 구성
2정규형 (2NF) 부분 함수 종속 제거 (완전 함수적 종속 관계)
3정규형 (3NF) 이행 함수 종속 제거
보이스-코드 정규형 (BCNF) 결정자가 후보 키가 아닌 함수 종속 제거
4정규형 (4NF) 다치(다중 값) 종속성 제거
5정규형 (5NF) 조인 종속성 제거

 

[ 1차 정규화 (1NF) ]

  • 테이블 내의 속성값은 원자값을 가져야한다.
  • 취미에 속성이 2개 이상 가지고 있을 경우, 원자값이 아니기 때문에 속성 1개만 가지도록 저장해야한다.

 

[ 2차 정규화 (2NF) ]

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

위 테이블을 보면, [고객명, 서비스 이름]이 [서비스 기간]에 영향을 주고, [서비스 이름]이 [서비스 가격]에 영향을 주는 관계를 부분 함수 종속 관계라고 한다. [고객명, 서비스 이름, 서비스 가격, 서비스 기간] 을 한 테이블에 두면, 부분 함수 종속성으로 2차 정규화를 만족하지 못한다. 따라서, 별도의 테이블로 두어야 2차 정규화를 만족할 수 있다.

 

 

[ 3차 정규화 (3NF) ]

  • 모든 속성이 기본키(또는 복합키)에 이행적 함수 종속이 되지 않아야 한다.
  • X → Y이고 Y→Z면 X→Z가 되는 관계를 이행적 함수 종속이라고 한다.

 

[ 보이스코드 정규화 (BCNF) ]

  • 제 3정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해한다.

 


DB 비정규화 (Denormalization) 란?

 

데이터베이스 비정규화는 하나 이상의 테이블에 데이터를 중복해 배치하는 최적화 기법이다.

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

 

 

 데이터베이스 비정규화 장단점

 

|     장점

  • 빠른 데이터 조회 가능 → 조인 비용 감소
  • 살펴봐야할 테이블이 줄기 때문에 데이터 조회 쿼리가 간단해진다.

 

|     단점

  • 데이터 갱신이나 삽입 비용 높음
  • 데이터 갱신 또는 삽입 코드 작성하기 어려움
  • 데이터를 중복하여 저장하므로 더 많은 저장 공간 필요

 

 비정규화 대상

 

  • 자주 사용되는 테이블에 액세스하는 프로세스의 수가 많고, 항상 일정한 범위만을 조회하는 경우
  • 테이블에 대량 데이터가 있고 대량의 범위를 자주 처리하는 경우, 성능 상 이슈가 있을 경우
  • 테이블에 지나치게 조인을 많이 사용하게 되어 데이터를 조회하는 것이 기술적으로 어려울 경우

 

 비정규화 사용

대부분의 대규모 IT 업체의 경우처럼, 규모 확장성(scalability)을 요구하는 시스템의 경우 거의 항상 정규화된 데이터베이스와 비정규화된 데이터베이스를 섞어 사용한다.

 


참고

| https://owlyr.tistory.com/20
| https://mangkyu.tistory.com/110

| https://chankim.tistory.com/9

728x90