2 분 소요


이상현상 (Anomaly)

삽입이상

불필요한 데이터를 추가해야지만 삽입이 가능한 상황

갱신이상

같아야 하는 정보가 복수 개의 행에 표현될 경우, 데이터를 수정할 때 일부 정보만 갱신되고 일부는 변하지 않아 데이터 오류가 발생하는 현상

삭제이상

의도하지 않은 데이터까지 삭제해야만 지우고자 하는 데이터를 지울 수 있는 현상

이러한 이상 현상들을 없애기 위해서 정규화를 수행한다.


정규화

정의

데이터의 일관성, 최소한의 중복, 최대한의 데이터 유연성을 위한 방법으로, 데이터를 분해하는 과정을 말한다.

img1

-> 1~5 정규화가 있으며, 제3정규화까지만 수행한다.

함수 종속성

X, Y가 있고 X가 변할 때, Y도 같이 변한다면 Y는 X에 함수적으로 종속된다고 표현한다.

  • X→Y이면 Y는 X에 함수적으로 종속
  • X : 결정자, Y : 종속자

종류

완전 함수 종속

종속자가 기본키에만 종속되고, 기본키가 여러 속성으로 구성되어 있을 경우 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우

부분 함수적 종속

릴레이션에서 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키가 여러 속성으로 구성되어 있을 경우 기본키를 구성하는 속성 중 일부에만 종속된 경우

이행적 함수 종속

릴레이션에서 X, Y, Z라는 3개의 속성이 있을 때, X→Y, Y→Z 이란 종속 관계가 있을 경우, X→Z가 성립될 때 이행적 함수 종속이라고 한다.

X를 알면 Y를 알고, Y를 알면 Z를 알 수 있는 경우

정규화 종류

제1 정규화

속성의 원자성을 만족시키도록 비정규형 테이블을 제1 정규형 테이블로 구조화하는 것을 말한다.

릴레이션의 속성 값 중에서 한 개의 기본키에 대해서 두 개 이상의 값을 가지는 반복집합을 제거한다.

img1

위 테이블를 보면 A가 좋아하는 음식이 2개이다.

img1

→ 위 테이블과 같이 반복집합이 제거된 테이블을 제1 정규형이라고 한다. 그리고 이러한 정규화 과정을 제1 정규화 라고 한다.

제2 정규화

  • 부분 함수 종속성을 제거하는 과정을 말한다.
  • 부분 함수 종속성은 기본키가 2개 이상의 Column 으로 구성되는 경우에만 발생한다.
    • 기본키가 1개의 Column 으로 구성된다면 제2 정규화는 건너뛴다.

img1

위 테이블의 기본키가 회원ID와 은행이라고 가정하자.

계좌번호는 회원ID와 은행에 종속된다. 하지만 회원 이름은 은행에 상관없이 회원ID에만 종속된다.

이렇게 기본키가 2개 이상의 Column (회원ID, 은행)으로 구성될 때 부분 함수 종속성이 발생할 수 있다.

테이블 분리를 통해서 이를 해결할 수 있다.

img1

img1

회원ID, 이름을 속성으로 가지는 새로운 테이블을 도출했다. 이렇게 테이블 분리를 통해서 제2 정규형을 구성하는 과정을 제2 정규화라고 한다.

제3 정규화

  • 이행적 함수 종속을 제거하는 과정을 말한다.
  • 기본키가 아닌 Column 이 다른 Column을 결정하는 결정할 수 없도록 한다.
  • 제3 정규화는 제1, 2 정규화를 마친 제2 정규형에 대해서 수행한다.

img1

위 테이블에서 회원ID와 계좌번호가 기본키라고 가정하자. 그런데 관리점 Column 을 보면 기본키에 종속되는 것이 아니라 관리점 코드에 종속되는 것을 볼 수 있다. 이를 이행 함수 종속이라고 한다.

관리점 코드를 기본키로 하는 새로운 테이블을 도출하여 이행 함수 종속성을 제거할 수 있다.

img1

img1

위와 같이 2개의 테이블로 분리하여 이행 함수 종속을 제거하였다.

반정규화

성능 향상을 위해서 데이터의 중복을 허용하고, 조인 연산을 줄여 데이터베이스 성능 향상을 하는 방법

정규화의 단점

정규화된 데이터를 조회할 때, join이 많이 발생하기 때문에 CPU와 메모리를 많이 사용하고 성능도 떨어진다. 이러한 성능 문제를 해결하기 위해서 반정규화를 수행할 수 있다.

정규화↔반정규화 사이에는 trade off가 있다.

정규화를 수행하면 데이터의 중복이 줄고 데이터 모델의 유연성이 높아지지만 반대로 성능이 내려간다.

반정규화를 수행하면 성능은 좋아지지만 유연성이 떨어지고 데이터의 중복이 많아져서 관리하기 어렵다.

반정규화를 수행하는 경우

특정 범위의 데이터만 자주 조회하는 경우

요약/집계 정보가 자주 요구되는 경우


참고 자료

  • 면접을 위한 CS 전공지식 노트