[DB] 정규화, 반정규화

NORMAN·2023년 10월 25일
0

DB

목록 보기
5/6

정규화 (Normalization)

  • 이상 현상이 있는 릴레이션을 분해하여 이상 현상을 없애는 과정
  • 즉, 테이블 간에 중복된 데이터를 허용하지 않는다는 것
  • 중복된 데이터 허용 X -> 무결성 유지, DB 용량 감소

장단점

장점

  • DB 변경 시 이상 현상 제거 가능
  • 정규화된 DB 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 구조 변경하지 않아도 되거나 일부만 변경해도 됨
  • DB에 연동된 응용 프로그램에 최소한의 영향만을 미침 -> 응용프로그램 생명 연장

단점

  • 릴레이션 분해 -> 릴레이션 수 증가 -> JOIN 연산 많아짐
  • 데이터 처리 시간이 느려질 수도 빨라질 수도 있음.
    -> 중복 속성 제거, 동일한 의미의 일반 속성이 하나의 테이블로 집약됨. -> 한 테이블의 데이터 용량이 최소화되는 효과가 있음.
  • 만약 JOIN이 많이 발생하여 성능 저하 나타나면 반정규화를 적용할 수 있다.

정규화 단계

제 1 정규화 (1NF)

테이블의 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분해하는 것.
다음과 같은 규칙 만족

  1. 각 컬럼이 하나의 속성만을 가짐
  2. 하나의 컬럼은 같은 종류나 타입의 값을 가져야한다.
  3. 각 컬럼이 유일한 이름을 가져야한다.
  4. 칼럼의 순서 상관없어야한다.

제 2 정규화 (2NF)

제 1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것.
-> 완전 함수 종속 : 기본키의 부분집합이 결정자가 되어선 안된다는 것 의미
다음과 같은 규칙 만족

  1. 제 1 정규화를 만족
  2. 모든 컬럼이 부분적 종속이 없어야한다. 모든 칼럼이 완전 함수 종속을 만족해야한다.

제 3 정규화 (3NF)

제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것
-> 이행적 종속 : A->B, B->C가 성립할 때 A->C가 성립되는 것 의미
다음과 같은 규칙 만족

  1. 제 2 정규화를 만족
  2. 기본키를 제외한 속성들 간의 이행 종속성(Transitive Dependency)이 없어야한다.

BCNF (Boyce-codd Normal Form)

제 3 정규화를 좀 더 강화한 버전 -> 3차 정규화로 해결할 수 없는 이상현상을 해결할 수 있음
BCNF란 3차 정규화를 만족하면서 모든 결정자가 후보키 집합에 속한 정규형이다.
다음과 같은 규칙 만족

  1. 제 3 정규화를 만족
  2. 모든 결정자가 후보키 집합에 속해야 한다.

4차, 5차 정규화

반정규화

  • DB 성능 향상을 위해, 데이터 중복을 허용하고 조인을 줄이는 데이터베이스 성능 향상 방법
  • 조회(SELECT) 속도를 향상시키지만, 데이터 모델의 유연성은 낮아짐.

수행 이유

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

절차

업로드중..

클러스터링이란?

  • 클러스터링 인덱스라는 것은 인덱스 정보를 저장할 때, 물리적으로 정렬해서 저장하는 방법
  • 조회 시 인접 블록을 연속적으로 읽기 때문에 성능 향상

반정규화 기법

테이블 통합

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

테이블 분할

테이블을 수직 또는 수평으로 분할하는 것

중복 테이블 추가

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

중복 속성 추가

조인해서 데이터를 처리할 때 데이터를 조회하는 경로를 단축하기 위해 자주 사용하는 속성을 하나 더 추가하는 것

반정규화 기법은 나중에 더 자세히 블로그에 정리할 예정

profile
백엔드 개발자 노먼입니다.

0개의 댓글