mun dev

[DB] 정규화(Normalization)와 반 정규화(De-Normalization) 본문

DB

[DB] 정규화(Normalization)와 반 정규화(De-Normalization)

mndev 2023. 4. 6. 00:15

정규화(Normalization)란?


데이터 모델의 중복을 최소화하고 데이터의 일관성, 유연성을 확보하기 위한 목적으로 데이터를 분해하는 과정을 뜻합니다.

 

정규화의 3가지 원칙

  1. 정보의 무손실: 분해된 릴레이션이 표현하는 정보는 분해되기 전의 정보를 모두 포함해야한다.
  2. 최소 데이터 중복: 이상현상을 제거, 데이터 중복을 최소화
  3. 분리의 원칙: 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리해서 표현

 

장점

  • 각종 이상 현상을 해결
  • 새로운 속성의 추가로 인해 DB구조를 확장하는 경우, 구조의 변경을 최소화할 수 있다.

 

단점

  • 릴레이션의 분해로 인해 릴레이션간의 연산이 많아져 응답 시간이 오히려 느려질 수 있다는 단점이 있다. 이러한 경우 반정규화를 통해서 성능을 향상시킬 수 있다.

 

 

제 1정규화(1NF)

속성의 원자성을 확보하고 원자값이 아닌 도메인을 분해

 

 

제 2정규화(2NF)

기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제2정규형에 속한다.

  • 완전함수종속: 어떤 속성이 기본키에 대해 완전히 종속일때

 

제 3정규화(3NF)

기본키를 제외한 컬럼간의 종속성을 제거한다. 즉 이행 함수 종속성을 제거한다.

  • 이행함수종속: A→B, B→C인 경우 A→C가 성립될 때 즉, A를 알면 B를 알고 그를 통해 C를 알 수 있는 경우를 의미

 

BCNF

릴레이션의 함수종속 관계에서 모든 결정자가 후보키이면 BCNF이다.

학생번호, 교수 테이블에서의 결정자 학생번호

 

후보키: 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합, 후보키는 기본키가 될 수 있는 후보들이며 유일성과 최소성을 동시에 만족

결정자: 어떤 애트리뷰트의 값이 다른 애트리뷰트의 값을 고유하게 결정할 수 있음

 

제 4정규화(4NF)

여러 컬럼들이 하나의 컬럼을 종속시키는 경우 분해하여 다중값 종속성을 제거한다.

 

제 5정규화(5NF)

조인에 의해서 종속성이 발생하는 경우 분해한다.

 

 

 

반정규화란(De-normalization)란?


성능 향상을 위해 정규화된 데이터 모델을 통합하는 작업으로, 의도적으로 정규화 원칙을 위배하는 행위이다.

 

 

반정규화의 종류

  • 테이블 통합/추가, 중복 속성 추가 등

반정규화를 수행하면 테이블이 단순해지고 관리 효율성이 증가하지만, 데이터의 일관성이나 무결성이 보장되지 않을 수 있다.

의도적으로 중복을 생성하여 검색기능은 향상되지만, 갱신, 삭제 등의 성능은 낮아진다.

 

 

반정규화의 대상

  • 수행속도가 많이 느린경우
  • 다량의 범위를 자주 처리해야 하는 경우
  • 특정범위의 데이터만 자주 처리하는 경우

 

 

이상현상(Anomaly)


이상현상이란, 테이블 내의 데이터들이 불필요하게 중복되어 테이블을 조작할 때 발생되는 데이터 불일치 현상이다.

이상현상에는 크게 3가지 이상현상이 있으며, 정규화를 통해서 이상현상들을 해결할 수 있다.

 

  • 삽입이상: 데이터를 저장할 때 원하지 않는 정보가 함께 삽입되어 불필요한 데이터가 자원을 낭비하는 경우
  • 삭제이상: 특정값을 삭제할 때 유지되어야 하는 정보까지 같이 삭제되는 경우
  • 갱신이상: 특정 값을 갱신 시킴으로써 정보의 모순성이 발생되는 경우