DB

DB 정규화

JUN0126 2022. 7. 19. 01:00

정규화 (Normalization)란?

- 기본 목표는 테이블 간에 중복된 데이터를 허용하지 않는다 라는 것

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

- 이상(Anomaly)를 제거하기 위해 중복성 및 종속성을 배제하는 방법

※ 데이터의 무결성 : 데이터의 정확성과 일관성을 유지하고 보증하는 것 (개체 무결성, 참조 무결성, 범위 무결성)

※ 이상(Anomaly) : 테이블 내의 데이터 중복성에 의하여 발생되는 데이터의 불일치 현상 (갱신 이상, 삽입 이상, 삭제 이상) 

정규화의 4가지 단계

제 1 정규화

 - 테이블의 컬럼이 원자값을 갖도록 테이블을 분해하는 것

  원자값 : 하나의 값을 가지고 있는 것, 한 컬럼에 두가지 이상의 값을 가질 수 없는것

제 2 정규화

 - 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것

 - 두개의 컬럼을 합쳐 만든 복합키가 기본키인 경우 부분키로 결정될 수 있는 컬럼을 합쳐 별도의 테이블로 관리하는것 

※ 완전 함수 종속 : 종속자가 기본키에만 종속되며, 기본키가 여러 속성으로 구성되어 있을 경우 기본키를 구성하는 모든 속성이 포함된 키본키의 부분집합에 종속된 경우, 기본키의 부분 집합이 결정자가 되어선 안된다, 

제 3 정규화

 - 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것

 - B가 변경되었음에도 불구하고 A로 조회를 했을 떄 B로 결정되는 C의 값이 변경되지 않고 그대로 조회되기 때문에 사용

  이행적 종속 : A->B, B->C, A->C 일 떄, A->C 가 성립되는 경우

BCNF 정규화 

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

※ 후보키 : 튜플을 유일하게 식별할 수 있는 속성들의 부분집합

 

정규화 단계가 높아질수록 이전 정규화가 지켜져야하며 BCNF 정규화 이후의 정규화도 있지만 실제로는 BCNF으로 실질적인 이상현상을 다 제거할 수 있다고 합니다.

 

참조 : https://mangkyu.tistory.com/110

 

[Database] 정규화(Normalization) 쉽게 이해하기

지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normaliz

mangkyu.tistory.com