정규화(Normalization)와 반정규화(De-Normalization)

연쇄코딩마·2022년 9월 28일
0

정규화란?

  • 데이터의 일관성, 최소한 데이터 중복, 최소한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정이다.
  • 정규화된 모델은 테이블이 분해 된다. 테이블이 분해되면 직원 테이블과 부서 테이블 간에 부서코드로 조인이 가능하다.
  • 정규화를 하면 불필요한 데이터를 입력하지 않아도 되기 떄문에 중복 데이터가 제거 된다.

정규화 절차

  • 제1정규화 : 속성(Attribute)의 원자성을 확보, 속성의 중복 값을 제거, 기본키(Primary)를 설정

    원자성 : 더 이상 쪼개어 질수 없는 성질

위 처럼 과목번호에 두가지 정보가 있다면 제 1 정규형을 만족하지 못한다.

제 1 정규형의 이상현상
삽입 이상 : 학생이 새과목을 수강신청할 때 반드시 학생의 학과와 지도교수를 알아야한다.(불필요한 정보)
삭제 이상 : 300번 학생이 c400 과목을 취소하면, 해당 과목에 대한 정보가 모두 사라진다.
갱신 이상 : 100번 학생이 지도교수를 변경할 때, p1인 행을 모두 찾아서 변경해주어야 한다.
이런 이상 현상이 발생하는 이유는 기본키가 아닌 속성들이 기본키에 확전 완전 함수 종속이 되지 못하고 부분 함수로 종속되어 있기 때문이다.

  • 제2정규화 : 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해), 복합 인스턴스에 대해 각 인스턴스의 종속적 중복을 삭제

제2 정규형에도 여전히 이상현상이 존재한다.

  • 삽입 이상 : 지도교수가 학과에 소속되어 있음을 추가 할때 반드시 지도 교수가 있어야한다.
  • 삭제 이상 : 300번 학생이 자퇴하는 경우 P3 교수의 학과 정보가 사라진다.
  • 갱신 이상 : 지도교수의 학과가 변경 되는 경우 모두 찾아서 변경시켜주어야 한다.(지도교수가 동일한 학생이 여러명 있는 경우)
    부분 함수 종속성 : 기본키가 2개 이상인 칼럼으로 이루어진 경우 발생한다. 기본키가 1개면 이과정을 스킵
  • 제3정규화 : 기본키를 제외한 칼럼간에 종속성을 제거, 즉 이행 함수 종속성을 제거한다. 또 일반 속성의 종속성을 제거

  • BCNF : 제3정규화를 좀 더 강화 시킨 정규형, 기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해한다. BCNF는 복수의 후보키가 있고, 후보키들이 복합 속성이어야 하며, 서로 중첩되어야 한다.

이상현상
삽입 이상 : 새로운 교수가 특정 과목을 담당한다는 새로운 정보를 추가 할수 없다. 적어도 한명 이상의 수강 학생이 필요

  • 삭제 이상 : 학번 100이 c234 과목을 취소하면 p2가 과목을 담당한다는 정보도 삭제된다.
  • 갱신 이상 : p1의 과목이 변경되면 p1행을 모두 찾아 변경시켜주어야한다.
  • 제4정규화 : 여러 칼럼들이 하나의 칼럼을 종속시키는 경우, 분해하여 다중값 종속성을 제거한다.

    다치 종속성을 제거한다.

  • 제5정규화 : 조인에 의해서 종속성이 발생되는 경우 분해한다.

정규화의 문제점

  • 정규화는 데이터조회(select)시에 조인(join)을 유발하기 때문에 CPU와 메모를 많이 사용함
  • 중첩된 루프(Nested Loop)를 사용해야 한다.

정규화를 사용한 성능 튜닝

  • 조인으로 인하여 성능이 저하 되는 문제를 반정규화로 해결할 수 있다.
  • 반정규화는 데이터를 중복 시키기 때문에 또 다른 문제점을 발생

반정규화란?

  • 데이터베이스의 성능 향상을 위하여, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법
  • 반정규화는 조회(select)속도를 향상시키지만, 데이터 모델의 유연성은 낮아진다.

반정규화를 수행하는 이유

  • 정규화에 충실하여 종속성, 활용성은 향상 되었지만 수행속도가 느려진 경우
  • 다량의 범위를 자주 처리하는 경우
  • 특정 범위의 데이터만 자주 처리하는 경우
  • 요약/집계정보가 자주 요구 되는 경우

반정규화 절차

  1. 대상 조사 및 검토 : 데이터 처리 범위, 통계성등을 확인해서 반정규화 대상을 조사한다.
  2. 다른 방법 검토 : 반정규화를 수행하기 전에 다른 방법이 있는지 검토한다 ex: 클러스팅, 뷰, 인덱스 튜>닝, 응용 프로 그램, 파티션
  3. 반정규화 수행 : 테이블, 속성, 관계등을 반 정규화 한다.

반정규화 기법

  • 계산된 컬럼 추가 : 배치 프로그램으로 총판매액, 평균잔고, 계좌평가를 미리 계산하고 그 결과를 특정칼럼에 추가한다.
  • 테이블 수직 분할 : 하나의 테이블의 두개 이상의 테이블로 분할한다. 즉, 칼럼을 분할 하여 새로운 테이블을 만드는 것이다.
  • 테이블 수평 분할 : 하나의 테이블에 있는 값을 기준으로 테이블을 분할하는 방법
  • 그 밖에 반정규화 기법 :

참조 : 참조

파티션(partition): 데이터베이스에서 파티션을 사용하여 테이블을 분할 할 수 있다. 파티션을 사용하면 논리적으로 하나지만 여러 개의 데이터 파일에 분산되어 저장

  • range partition : 데이터 값의 범위를 기준으로 파티션을 수행한다.
  • list partition : 특정한 값을 지정하여 파티션을 수행한다.
  • hash partition : 해쉬 함수를 적용하여 파티션을 수행
  • composite partition : 범위와 해시를 복합적으로 사용하여 파티션을 수행한다.

테이블 병합

  • 1:1 관계의 테이블을 하나의 테이블로 병합해서 성능을 향상시킴
  • 1:N 관계의 테이블을 병합하여 성능을 향상 시킨다. 하지만 많은 양의 데이터 중복이 발생한다.
  • 슈퍼 타입과 서브 타입관계가 발생하면 테이블을 통합하여 성능을 향상시킨다.

슈퍼타입과 서브타입
예를 들어 임시직원과 사원들을 같은 테이블에서 관리 한다고 생각해보자 사원들은 연봉이 있을 것이고 임시직들은 월급이 있을것이다. 이를 보면 전체 사원(임시직포함)을 검색하는 일은 쉬울것이고, 무결성이 유리할것이다. 단점은 불필요한 null값이 많이 발생할 것이다. 이것을 슈퍼 타입이라고 한다.
반대로 서브 타입, 정규직과 임시직을 나누면 어떻게 될까? null값이 없거나 줄어 들것이다. 정규직과 임시직을 나누는 업무가 많을때 효율이 좋다고 할수 있다. UNION 함수를 쓸떄 중복이 제거가 되기 떄문에 PK를 잘관리 해야한다. 또 한 비효율적인 조인이나 합교집합이 발생할수있다.

profile
只要功夫深,铁杵磨成针, 하고자 하면 쇠 막대기도 바늘로 만들 수 있다

0개의 댓글

관련 채용 정보