본문 바로가기
Database

정규화란 무엇인가

by hseong 2023. 3. 22.

본 내용은 한빛미디어의 데이터베이스 개론(3판)을 읽고 정리한 내용입니다.


속성(attribute)들 간의 종속성(dependency)을 분석해서 하나의 종속성하나의 릴레이션(relation)으로 표현되도록 분해해 나가는 과정을 정규화라 한다.

기본 원칙은 다음 3가지이다.

  • 정보의 무손실
    • 분해된 릴레이션이 표현하는 정보는 분해되기 전의 정보를 모두 포함하여야 하며, 더 바람직한 구조여야 한다.
    • 분해된 릴레이션은 조인을 통하여 언제든 원래 릴레이션의 모습으로 복원할 수 있어야 한다.
  • 중복성 감소
    • 중복으로 인한 이상 현상을 제거한다.
  • 테이블의 분리
    • 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리하여 표현해야 한다.

 

정규형은 기본 정규형과 고급 정규형으로 나뉜다. 일반적으로는 기본 정규형인 1차 정규화, 2차 정규화, 3차 정규화, BCNF 정도까지만 수행한다.

 

1. 1차 정규화

  • 모든 속성의 도메인은 원자값으로 구성되어 있어야한다. 어떠한 속성도 여러개의 값을 가져서는 안 된다.

RDB에서 릴레이션은 모든 속성이 원자 값을 가지는 특성이 있다. 그러므로 1차 정규형을 만족해야지 RDB의 릴레이션이 될 자격을 가진다.

 

 

2. 2차 정규화

  • 모든 속성은 기본키에 완전 함수 종속이어야 한다.

기본키가 둘 이상의 속성으로 구성되어 있다고 했을때, 어떠한 속성도 기본키를 구성하는 속성 중 일부에만 함수 종속이어서는 안 된다. 즉, 부분 함수 종속을 제거해야 한다.

따라서 부분 함수 종속이 발생하는 속성과 결정자를 별도의 테이블로 분리해야 한다.

 

 

3. 3차 정규화

  • 기본키가 아닌 모든 속성이 기본키에 이행 함수 종속이 되지 않아야 한다.

릴레이션을 구성하는 속성 집합 X, Y, Z가 있을 때, X -> Y를 결정하고, Y -> Z를 결정하면 논리적으로 X -> Z가 성립한다. 이때, 속성 집합 Z가 속성 집합 X에 이행 함수 종속 되어 있다 한다.

이름 좋아하는 게임 출시연도
게이머 엘든링 2022

위와 같은 테이블이 있을 때, 이름은 좋아하는 게임을 결정하며, 게임은 출시연도를 결정하게 된다.

출시연도는 사용자의 이름에 의해 결정되는 것이 아니기 때문에 별도의 테이블로 분리해야만 한다.

이름 좋아하는 게임
게이머 엘든링
게임 출시연도
엘든링 2022

 

 

4. BCNF(보이스-코드 정규화)

  • 모든 결정자는 후보키에 속해야 한다.

하나의 릴레이션에는 여러 개의 후보키가 존재할 수 있다.

고객아이디 인터넷강좌 담당강사번호
회원A 오픽 P001

위의 테이블에서 {고객아이디, 인터넷강좌} 속성 집합은 담당강사번호를 함수적으로 결정한다.

그러나 한 명의 강사가 오직 하나의 인터넷강좌를 담당한다면 담당강사번호 가 인터넷강좌 속성을 함수적으로 결정하게 된다.

따라서 위의 테이블은 아래와 같이 분리되어야 한다.

고객아이디 담당강사번호
회원A P001
담당강사번호 인터넷강좌
P001 오픽

따라서 더 이상 후보키가 아닌 결정자가 존재하지 않아 BCNF를 만족하게 된다.