Skip to content

Latest commit

 

History

History
104 lines (60 loc) · 4.11 KB

DB_Normalization.md

File metadata and controls

104 lines (60 loc) · 4.11 KB

정규화(Normalization)

  • 데이터의 일관성
  • 최소한의 데이터 중복
  • 최대한의 데이터 유연성

데이터를 분해하는 과정

  • 데이터 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법
  • 정규화 수행시, 비즈니스 변화에도 데이터 모델의 변경을 최소화할 수 있다
  • 실질적으로 제3정규화까지 수행

정규화 절차

정규화 절차 설명
제1정규화 - 속성(Attribute)의 원자성을 확보
- 기본키(Primary key) 설정
제2정규화 - 기본키가 속성 2개 이상의 묶음일때만 실행
- 부분 함수 종속성 제거
제3정규화 - 기본키를 제외한 속성간의 종속성 제거
- 이행 함수 종속성 제거
BCNF - 기본키 제외하고 후보키가 있는 경우 실행
- 후보키가 기본키를 종속시키면 분해
제4정규화 - 여러 속성이 하나의 속성을 종속시키는 경우 실행
- 분해하여 다중 값 종속성 제거
제5정규화 - 조인에 의해 종속성이 발생되는 경우 분해

함수적 종속성 (Functional Dependency)

정규화는 함수적 종속성을 근거로 한다.

X -> Y일때 Y는 X에 함수적으로 종속한다. (X가 변화하면 Y도 변화한다)

  • 제1정규화

    • 데이터를 구분할 수있는 기본키 속성(들)을 설정한다
    • ex) 계좌 테이블의 [계좌번호, 회원ID] 기본키
  • 제2정규화

    • 부분 함수 종속성
      1. 기본키가 아닌 다른 속성에 종속되어있다. (그 속성이 바뀌면 값이 따라 바뀜)
      2. 기본키가 여러 속성으로 구성되어 있을 기본키 속성 일부에 종속되어있다
    • 부분 함수 종속성 분해 ex) 종속되어있는 속성을 분해해 새 테이블이 도출된다
  • 제3정규화

    • 이행 함수 종속성
      1. 기본키를 제외하고 칼럼 간에 종속성이 발생하는 것
      2. ex) [계좌] 테이블에 기본키[계좌번호, 회원아이디]를 제외하고 [관리점], [관리점 코드] 속성이 있다. -> 종속성 발생 (분해한다!)
  • BCNF (Boyce-Codd Normalization Form)

    • 복수의 후보키가 있고, 후보키들이 복합 속성이어야 하며, 서로 중첩되어야 한다
    • ex) [수강] 테이블에 기본키[학생번호, 강의명] 과 속성[교수]가 있다
      1. [학생번호, 강의명]은 결정자이다
      2. [교수] 역시 결정자이다. 하지만 후보키는 아니다
      3. [학생번호, 강의명] 속성을 가진 테이블과 새 [강의명, 교수] 테이블을 분리한다.

정규화의 문제점

  • 테이블을 분해해서 데이터 중복을 제거하고 데이터 유연성을 높인다
  • 데이터 조회 SELECT 에 JOIN문을 유발한다 . CPU와 메모리 사용이 많다
  • 조인의 부하로 인한 성능 저하 문제점을 해결하기 위해 반정규화가 등장했다

반정규화 (De-Normalization)

  • 데이터 베이스의 성능 향상을 위하여 데이터 중복 허용, 조인을 줄이는 방법
  • 조회(SELECT) 속도 향상, 하지만 데이터 모델 유연성 하락

반정규화를 수행해야하는 경우

  • 정규화로 수행 속도가 느려지는 경우
  • 다량의 범위를 자주 처리해야하는 경우
  • 특정 범위의 데이터만 자주 처리하는 경우
  • 요약/집계 정보가 자주 요구되는 경우

반정규화 기법

  • 계산된 컬럼 추가
  • 테이블 수직 분할
    • 하나의 테이블을 두개 이상으로 분할. 칼럼을 두군데로 분할
  • 테이블 수평 분할
    • 하나의 테이블에 있는 값(row)을 기준으로 그 값의 위아래로 분할
  • 테이블 병합
    • 1:1 관계 테이블을 하나의 테이블로 병합
    • 1:N 관계 테이블을 병합하여도 되지만 많은 양의 데이터 중복이 발생한다
    • 슈퍼타입:서브타입 관계가 발생할 때 테이블을 통합하여 성능을 향상시킨다