[데이터베이스] 정규화 본문

CS/데이터베이스

[데이터베이스] 정규화

미니모아 2022. 4. 8. 15:50
반응형

정규화

왜?

한 릴레이션에 여러 엔티티의 어트리뷰트들을 혼합하게 되면 정보가 중복 저장되며, 저장 공간을 낭비하게 된다. 또 중복된 정보로 인해 갱신 이상이 발생하게 된다. 동일한 정보를 한 릴레이션에는 변경하고, 나머지 릴레이션에서는 변경하지 않은 경우 어느 것이 정확한지 알 수 없게 되는 것이다. 이러한 문제를 해결하기 위해 정규화 과정을 거친다.

이상(Anomaly)의 개념 및 종류

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

정규화란

관계형 데이터 베이스에서 중복을 최소화하기 위해 데이터를 구조화하는 방법이다. 나쁜 릴레이션의 애트리뷰트들을 나누어서 좋은 작은 릴레이션으로 분해하는 작업을 말한다. 정규화 과정을 거치면 정규형을 만족하게 되는데, 정규형이란 특정 조건을 만족하는 릴레이션의 스키마 형태를 말한다.

  • 데이터 베이스의 논리적 설계 단게에서 수행한다.
  • 논리적 처리 및 품질에 큰 영향을 미친다.
  • 일관성, 정확성, 단순성, 비중복성, 안정성 등을 보장한다.
  • 정규적 수준이 높을 수록 유연한 데이터 구축이 가능하고 정확성이 높아지는 반면, 물리적 접근이 복잡하고 너무 많은 조인으로 인해 조회 성능이 저하된다.

나쁜 릴레이션의 판단 방법

나쁜 릴레이션을 판단하기 위해 엔티티를 구성하고 있는 애트리뷰트 간에 함수적 종속성을 판단한다. 판단된 함수적 종속성은 좋은 릴레이션 설계의 정형적 기준으로 사용된다.

함수적 종속성

함수적 종속성이란 데이터들이 어떤 기준값에 의해 종속되는 것을 의미한다. 애트리뷰트 데이터들의 의미와 애트리뷰트들 간의 상호 관계로부터 유도되는 제약 조건의 일종이다. X와 Y를 임의의 애트리뷰트 집합이라고 할 때, X의 값이 Y의 값을 유일하게 결정한다면 X는 Y를 함수적으로 결정한다고 한다.

<수강> 릴레이션이 (학번, 이름, 과목명)일 때 학번이 결정되면 과목명에 상관 없이 항상 같은 이름이 대응되므로 이름을 학번에 종속적이라고 말하며 학번 -> 이름으로 쓸 수 있다.

완전 함수적 종속

어떤 테이블 R에서 속성 A가 다른 속성 집합 B 전체에 대해 함수적 종속이지만 B의 진부분집합 C에는 함수적 종속이 아닐때

<수강> 릴레이션이 (학번, 과목명, 성적, 학년) 으로 되어 있고 기본키가 (학번, 과목명) 일 때 성적은 학번 + 과목명에 의해서만 결정되므로 완전 함수적 종속이다.

부분 함수적 종속

어떤 테이블 R에서 속성 A가 다른 속성 집합 B 전체에 대해 함수적 종속이면서 속성 집합 B의 어떠한 부분 집합에도 함수적 종속일 때

<수강> 릴레이션이 (학번, 과목명, 성적, 학년) 으로 되어 있고 기본키가 (학번, 과목명) 일 때 학년은 과목명에 관계 없이 학번이 같으면 항상 같은 학년이 오므로 부분 함수적 종속이다.

목적

  • 안정성 및 무결성 유지
  • 어떠한 릴레이션이라도 표현 가능해지도록
  • 효과적인 검색 알고리즘 생성
  • 중복을 배제하여 이상의 발생 방지 및 자료 저장 공간의 최소화
  • 데이터 삽입시 릴레이션을 재구성할 필요성을 줄인다.
  • 데이터 모형의 단순화가 가능하다
  • 속성의 배열 상태 검증이 가능하다
  • 개체와 속성의 누락 여부 확인이 가능하다.

원칙

  • 무손실 표현
  • 분리의 원칙
  • 중복성 감소

과정

제 1 정규형 (1NF)

릴레이션에 속한 모든 도메인이 원자값만으로 되어 있는 정규형이다. 모든 애트리뷰트가 도메인에 속하는 하나의 값을 가져야한다.

제 2 정규형 (2NF)

릴레이션 R이 1NF이고, 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족하는 정규형이다.

제 3 정규형 (3NF)

릴레이션 R이 2NF이고, 기본키가 아닌 모든 속성이 기본키에 대해 이행적 종속을 만족하지 않는 정규형이다.

  • 무손실 조인 또는 중속성 보존을 저해하지 않고도 항상 3NF를 얻을 수 있다.

이행적 종속은 A -> B 이고 B -> C 일 때 A -> C를 만족하는 관계

BCNF (Boyce-Codd)

릴레이션 R에서 결정자가 모두 후보키인 정규형이다. 결정자이면서 후보키가 아닌 것을 제거한다.

모든 BCNF가 종속성을 보존하는 것은 아니다.

제약 조건

  • 키가 아닌 모든 속성은 각 키에 대하여 완전 종속해야한다.
  • 키가 아닌 모든 속성은 그 자신이 부분적으로 들어가 있지 않은 모든 키에 대하여 완전 종속해야 한다.
  • 어떤 속성도 키가 아닌 속성에 대해서는 완전 종속할 수 없다.

제 4 정규형 (4NF)

다치 종속을 제거한다.

제 5 정규형 (5NF)

조인 종속이 R의 후보키를 통해서만 성립되는 정규형이다.

장점과 단점

장점

  • 이상 현상이 발생하는 문제를 해결할 수 있다.
  • 구조 확장시 재디자인 최소화
  • 사용자에게 데이터 모델을 더욱 의미 있게 제공

단점

  • 릴레이션 분해로 인해 조인 연산이 많아지고 이로 인해 질의에 대한 응답 시간이 느려질 수 있다. 개선을 위해 반정규화를 사용할 수 있다.

반정규화(Denormalization)

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

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

종류

테이블 통합

두 개의 테이블이 조인되는 경우가 많아 하나의 테이블로 합쳐 사용하는 것이 성능 향상에 도움이 될 경우 수행

테이블 분할

수직 분할: 하나의 테이블에 속성이 너무 많을 경우

수평 분할: 레코드별로 사용 빈도의 차이가 큰 경우

중복 테이블 추가

여러 테이블에서 데이터를 추출해서 사용해야하거나 다른 서버에 저장된 테이블을 이용해야하는 경우 중복 테이블을 추가하여 작업의 효율성을 향상 시킬 수 있다.

  • 정규화로 인해 수행 속도가 느려지는 경우
  • 많은 범위의 데이터를 자주 처리해야하는 경우
  • 처리 범위를 줄이지 않고는 수행 속도를 개선할 수 없는 경우

집계 테이블의 추가

집계 데이터를 위한 테이블을 생성하고 각 원본 테이블에 트리거를 설정하여 사용하는 것, 트리거의 오버헤드에 유의해야한다.

진행 테이블의 추가

이력 관리 등의 목적으로 추가하는 테이블로, 적절한 데이터 양의 유지와 활용도를 높이기 위해 기본키를 적절히 설정한다.

특정 부분만을 포함하는 테이블의 추가

데이터가 많은 테이블의 특정 부분만 사용하는 경우 해당 부분만으로 새로운 테이블을 생성한다.

중복속성 추가

기본키의 형태가 적절하지 않거나 여러 개의 속성으로 구성된 경우

 

반응형
Comments