Tech Log

[DataBase] 정규화(Normalization) 본문

Computer Science/DataBase

[DataBase] 정규화(Normalization)

yuhee kim 2023. 2. 18. 00:38

정규화(Normalication)

릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하거나,

저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정.

 

*데이터베이스 이상 현상 : 삭제할 때 필요한 데이터가 같이 삭제되거나 잘못된 정보가 들어있거나 데이터를 삽입해야 하는데 하나의 필드 값이 NULL이 되면 안돼서 삽입하기 어려운 현상.

 

정규화의 원칙

1. 정보 표현의 무손실 : 정보가 사라지지 않아야 한다, 같은 의미의 정보를 유지하면서 더 효율적인 구조로 변화해야 한다.

2. 데이터 중복의 최소 : 데이터 중복을 최소화하면서, 데이터 관리의 편리성을 부여하고 자료 저장 공간을 효율적으로 사용.

3. 분리의 원칙 : 독립적인 관계는 별개의 릴레이션으로 표현, 릴레이션 각각에 대해 독립적 처리가 가능.

 

정규화 과정

정규화 원칙을 기반으로 정규형을 만들어가는 과정.

정규화된 정도는 정규형(NF, Normal Form)으로 표현.

다음과 같은 정규형들이 있다.

 

기본 정규형 : 제1정규형, 제2정규형, 제3정규형, 보이스/코드 정규형

고급 정규형 : 제4정규형, 제5정규형

 

제1정규형

모든 도메인이 더 이상 분해될 수 없는 원자값(atomic value)만으로 구성된 릴레이션.

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

만약 반복 집합이 있다면 제거해야 한다.

 

출처 : 면접을 위한 CS 전공지식 노트(2022)

위 그림과 같이 홍철과 범식이란 ID에 수강명 값이 두 개 이상이었는데 이것을 나눠서 반복 집합을 제거하였다.

 

다만 제1정규형에는 기본 키에 부분 함수 종속된 속성이 있을 수 있다.

이는 기본키와 무관한 속성이 존재한다는 것이다.

 

이때 제2정규형을 사용하면 이러한 문제를 해결할 수 있다.

 

제2정규형

릴레이션이 제1정규형이며 부분 함수의 종속성을 제거한 형태.

부분 함수의 종속성 제거로 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적이게 되었다.

 

출처 : 면접을 위한 CS 전공지식 노트(2022)

위 그림에서 제1정규형의 릴레이션은 기본키인 유저ID, 수강명에 종속되지 않은 속성이 존재한다.

유저번호는 수강명에 종속되지 않는다.

따라서 유저번호 릴레이션과 성취도 릴레이션으로 분리한다.

 

이렇게 분리할 때 주의점은 동등한 릴레이션으로 분해해야 하고, 정보 손실이 발생하지 않는 무손실 분해로 분해되어야 한다는 것이다.

제2정규형은 이행적 함수 종속이 존재한다.

 

이행적 함수 종속

출처 : 면접을 위한 CS 전공지식 노트(2022)

A -> B와 B -> C가 존재하면 논리적으로 A -> C가 성립.

이때 집합 C가 A에 이행적으로 함수 종속이 되었다고 한다.

 

이행적 함수 종속을 없애려면 제3정규형으로 없앨 수 있다.

 

제3정규형

제2정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속(transitive FD)을 만족하지 않는 상태.

 

출처 : 면접을 위한 CS 전공지식 노트(2022)

제2정규형에서는 유저ID에 의해서 등급이 결정되고,

등급에 의해서 할인율이 결정되어

이행적 함수 종속이 있다.

 

유저ID -> 등급, 등급 -> 할인율 이 두 종속을  두 개의 릴레이션으로 분리한다.

 

모든 이원 릴레이션(속성이 두 개밖에 없는 것)은 제3정규형에 속한다.

키가 아닌 속성 값의 갱신 시 불필요한 부작용(이상)은 발생하지 않는다.

 

보이스/코드 정규형(BNCF)

제3정규형이고 결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태.

강한 제3정규형이라고도 한다.

*결정자 : 함수 종속 관계에서 특정 종속자(dependent)를 결정짓는 요소. X -> Y일 때 X는 결정자, Y는 종속자이다.

 

출처 : 면접을 위한 CS 전공지식 노트(2022)

위 릴레이션에서 {학번, 수강명} 또는 {학번, 강사}가 후보키가 된다.

만약 범석이라는 강사가 롤이라는 수강명을 담당한다고 했을 때 삽입하면 학번이 NULL이 된다.

 

또한 함수 종속 다이어그램은 다음과 같다.

출처 : 면접을 위한 CS 전공지식 노트(2022)

 

강사 속성이 결정자이지만 후보키가 아니라서 강사 속성을 분리해야 한다.

그렇다면 다음과 같이 분리가 된다.

 

출처 : 면접을 위한 CS 전공지식 노트(2022)

 

정규화 과정을 거친다고 해서 성능이 100% 좋아지는 것은 아니다.

성능이 좋아질 수도 있고 나빠질 수도 있다.

 

서비스에 따라 정규화 또는 비정규화 과정을 진행해야 한다.

 

 

참조
  • 주홍철, 면접을 위한 CS 전공지식 노트, 길벗(2022)
  • 이석호, 데이터베이스론, 정익사(2010)
Comments