Hyunebee

SQLD - 정규화, 반정규화 본문

MySQL

SQLD - 정규화, 반정규화

Hyunebee 2022. 2. 8. 22:15

정규화

-데이터의 일관성, 데이터의 중복제거, 데이터의 유연성등을 늘리는 방법이다.

-정규화는 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법이다.

 

 

정규화의 단계

제1정규화(중복이 없고, 기본키를 가진다.)

 1.열에는 위, 아래 순서가 없다

 2.행에는 좌, 우 순서가 없다

 3.중복되는 열이 없다.

 4. 모든 열과 행의 중복지점에는 해당되는 분야에서 한 개의 값을 가진다.

  

 이때 제 1정규화를 만족해도 제 2정규화를 만족하지 않는 예가 있을 수 있다.

제2정규화

 제 1정규형을 만족하고 이때 후보키 Key_A와  Key_A가 속하지 않는 속성 V가 있을 때, V를 결정하기 위해 Key_A의 일   부가 아닌 전체를 참조해야 하는 경우에만 제 2정규화로 인정한다.

https://ko.wikipedia.org/wiki/%EC%A0%9C2%EC%A0%95%EA%B7%9C%ED%98%95

 위의 그림을 참조하면 지금 후보키는 종업원과 기술 각각은 후보키가 될 수 없다. 종업워노가 기술 모두 각각 다수를 가

 지고 있기 때문 둘이 합쳐서 복합키로 사용중이다. 위에 설명과 비교했을때 후보키{종업원, 기술}에서 속성{근무지}를 결

 정하는건 종업원하나이다. 즉 전체를 참조하지 않고 일부만 참조한다. 그럼으로 제 2 정규형을 만족하지 않는다. 

https://ko.wikipedia.org/wiki/%EC%A0%9C2%EC%A0%95%EA%B7%9C%ED%98%95

 

 위의 디자인을 아래로 표현하면 2정규형을 만족한다. 후보키의 요소중 하나인 종업원과 근무지를 하나의 테이블로 만들

 고 테이블을 하나 더 만들어 2개의 테이블로 표현하는것이다. 

 

제3정규화(이행 함수 종속성 제거)

 제2정규화를 만족하고 테이블 내의 모든속성이 기본 키에만 의존하며, 다른 후보 키에 의존하지 않는다. 추이 종속이 

 존재하지 않음을 요구한다. (이행 종속 X-> Y . Y -> Z, X -> Z  'X가 Z를 결정한다.') 

https://ko.wikipedia.org/wiki/%EC%A0%9C2%EC%A0%95%EA%B7%9C%ED%98%95

 위의 그림을 보면 2정규화를 만족한다. 하지만 우승자 생년 월일에 접근할때 우승자만 알아도 우승자 생년 월일

 에 접근 할 수 있다. 즉 다른 후보키에 의해 속성에 접근할 수 있다. 

https://ko.wikipedia.org/wiki/%EC%A0%9C3%EC%A0%95%EA%B7%9C%ED%98%95

 위의 그림과 같이 2개의 테이블로 분해할 수 있다. 

BCNF

 결정자가 후보키가 아닌 함수 종속성 제거

  X->Y에 대하여 (X는 결정자)

  Y가 X의 부분집합이거나 X는 후보키여야 한다.즉 후보키가 아닌 다른 속성이 다른 속성을 함수적으로 결정하면 안된

 다.

 

제4정규화

제5정규화

 

정규화의 문제점

 정규화는 데이터 조회시에 조인을 유발하기 때문에 CPU와 메모리를 많이 사용하게 된다. 이런 경우 조인의 성능 저하

 를 해결하기 위해 반정규화를 한다.

 

반정규화

 데이터 베이스의 성능 향상을 위하여 데이터의 중복을 허용하고 조인을 줄여 데이터베이스 성능을 향상 시키는 방법이

 다. 

 

 반정규화 기법

 -계산된 칼럼 추가

 -테이블 수직 분할

 -테이블 수평 분할

 -파티션 기법

  데이터베이스에서 파티션을 사용하여 테이블을 분할할 수 있다. 

   1.Range Partition : 데이터 값을 범위

   2.List Partition : 특정한 값을 기준

   3.Hash Partition : 해시함수를 적용

   4.Composite Partition : 해시와 범위를 복합적으로 사용하여 파티션을 수행한다.

 -테이블 병합 기법

  Super type과  SubType

  1.OneToOne Type (1:1) 슈퍼타입과 서브타입을 개별 테이블로 도출한다. > 테이블 수가 많아서 조인이 많이 발생하      고 관리가 어렵다

  2.Plus Type (슈퍼 + 서브): 슈퍼 타입과 서브타입 테이블로 도출한다. > 조인이 발생하고 관리하기 어렵다.

  3.Single Type (All in one) : 슈퍼 타입과 서브타입을 하나의 테이블로 도출 > 조인의 성능은 좋지만 입출력 성능이 낮    음

 

 

 

'MySQL' 카테고리의 다른 글

SQLD - DB  (0) 2022.02.12
SQLD - 엔티티, 속성, 관계  (0) 2022.02.07
SQLD - 스키마  (0) 2022.02.07
SQLD - ERD 단계  (0) 2022.02.06
SQLD - 데이터 모델링  (0) 2022.02.06