본문 바로가기

카테고리 없음

[DB] DB정규화

정규화(Normalization)?

관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스다.

이상문제를 해결하기 위해 속성들끼리의 종속관계를 분석해 

여러개의 릴레이션으로 분해하는 과정이다.

데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하고 잘 조직된 관계를 재구성하여 

작고 잘 조직된 관계를 생성하는 것이다.

 

목적

- 불필요한 데이터를 제거, 데이터의 중복을 최소화 한다.

- 데이터베이스 구조 확장시 재디자인을 최소화

- 다양한 관점에서의 쿼리를 지원하기 위해

- 무결성 제약조건의 시행을 간단하게 하기 위해

- 각종 이상현상을 방지하기 위해 테이블의 구성을 논리적이고 직관적으로 한다.

 

이상현상(Anomaly)?

- 삭제이상 : 튜플 삭제시 연쇄 삭제가 발생하는 현상

- 삽입이상 : 튜플 삽입시 지정하지 않은 속성값이 null을 갖거나 원하지 않는 자료가 삽입되는 현상

- 갱신이상 : 데이터 갱신시 일관성 유지가 안되는 현상

 

비정규화(De-normalization)이란?

정규화된 엔티티, 속성, 관계를 시스템의 성능 향상 및 개발과 운영의 단순화를 위해

중복 통합, 분리 등을 수행하는 데이터 모델링 기법이다.

 

이럴때 사용한다

- 디스크 I/O 량이 많아서 조회시 성능이 저하될 때

- 테이블끼리의 경로가 너무 멀어 조인으로 인한 성능 저하가 예상될 때

- 칼럼을 계산하여 조회할 때 성능이 저하될 것이 예상될 때

 

비정규화 대상

- 자주 사용되는 테이블에 엑세스하는 프로세스의 수가 가장 많은 경우

- 항상 일정한 범위만을 조회하는 경우

- 테이블에 대량 데이터가 있고 대량의 범위를 자주 처리하는 경우

- 성능이슈가 있을 경우

- 테이블에 지나치게 조인을 많이 사용하게 되어 데이터 조회가 어려울 경우

 

주의할 점

- 비정규화를 과도하게 사용하면 데이터의 무결성이 깨질 수 있다

- 입력, 수정, 삭제의 질의문에 대한 응답 시간이 늦어질 수 있다


제1정규화

테이블의 컬럼이 원자값을 갖도록 테이블을 분해하는 것이다. (도메인이 원자값, 부분적 함수 종속 제거)

제1정규화

제2정규화

제1정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다. (부분적 함수 종속 제거)

완전 함수 종속이란 기본키의 부분집합이 결정자가 되서는 안된다는 것을 말한다.

제2정규화

 

제3정규화

제2정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것이다. (이행적 함수 종속 제거)

이행적 종속이란 A>B, B>C가 성립할 때 A>C가 성립되는 것을 의미한다.

 

BCNF 정규화

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

(결정자이면서 후보키가 아닌 것 제거)

 

제4정규화

(다치 종속 제거)

 

제5정규화

(조인 종속성 이용)