certification/정보처리산업기사

[DB] 정규화, 이상 현상, 함수 종속, 반 정규화

gaing 2024. 10. 19. 19:09

정규화(Normalization)

관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상 현상을 방지하고, 데이터의 일관성과 정확성을 유지하기 위해 테이블을 여러 단계로 나누는 과정(무손실 분해하는 과정)

 

정규화 단계(원부이 결다조)

단계 조건
제1정규형(1NF) 자값으로 구성
제2정규형(2NF) 분 함수 종속 제거(완전 함수적 종속 관계)
제3정규형(3NF) 행 함수 종속 제거
보이스-코드 정규형(BCNF) 정자 후보 키가 아닌 함수 종속 제거
제4정규형(4NF) 치(다중 값) 종속 제거
제5정규형(5NF) 인 종속 제거

 

1. 제1정규형(1NF; First Normal Form)

모든 속성이 원자값을 가져야 한다. 즉, 각 칸에 하나의 값만 저장되어야 한다.

  • 테이블 내의 속성값은 원자값을 가지고 있어야 한다.
    • 원자값 : 쪼갤 수 없는 가장 작은 단위
  • 이메일 주소가 속성에 2개 이상 가지고 있는 경우 원자값이 아니기 때문에 속성 1개만 가지도록 저장하면 1차 정규화를 만족한다.

 

2. 제2정규형(2NF; Second Normal Form)

제1정규형을 만족하면서, 부분적 함수 종속성을 제거해야 한다. (완전 함수적 종속 관계)

  • [고객명], [서비스 이름]이 [서비스 이용 기간]에 영향을 주고, [서비스 이름]이 [서비스 가격]에 영향을 주는 관계를 부분 함수 종속 관계라고 한다.
  • [고객명], [서비스 이름], [서비스 가격], [서비스 이용 기간]을 한 테이블에 두는 것은 부분 함수 종속성으로 인해 2차 정규화를 만족하지 못한다.
  • 부분 관계인 [서비스 이름], [서비스 가격] 관계를 별도의 테이블로 두면 부분 함수 종속 관계가 제거되어 2차 정규화를 만족한다.

 

3. 제3정규형 (3NF; Third Normal Form)

제2정규형을 만족하면서,이행적 함수 종속성을 제거해야 한다.
  • 이행적 함수 종속성이란 A → B, B → C일 때 A → C가 성립하는 종속 관계이다.
  • 기본키가 아닌 속성들끼리의 의존성을 제거해야 한다.

  • [책번호]가 [출판사]에 영향을 주고, [출판사]가 [홈페이지]에 영향을 주는 관계인 A → B이고, B → C이면서 A → C 관계가 같이 있는 경우를 이행 함수 종속 관계라고 한다.
  • [책번호], [출판사], [홈페이지]를 한 테이블에 두는 것은 이행 함수 종속성으로 인해 3차 정규화를 만족하지 못한다.
  • [책번호]는 [홈페이지]에 직접 영향을 주는 관계가 아니기 때문에(A → C 관계) [책번호], [출판사] 테이블과 [출판사], [홈페이지] 테이블로 분리하여 이행 함수 관계를 제거하여 3차 정규화를 만족한다.

 

4. 보이스-코드 정규화(BCNF; Boyce and Codd Normal Form)

제3정규형을 강화한 형태로, 모든 결정자가 후보키가 되어야 한다는 조건을 추가로 요구한다.
  • 결정자란 다른 속성의 값을 결정하는 속성을 의미한다.

  • [학번], [과목명]이 [교수명]에 영향을 주고, [교수명]이 [과목명]에 영향을 주는 관계로서, [교수명]은 [과목명]에 영향을 주지만 한 테이블에 같이 존재하고 [교수명]은 키가 아닌 상황이므로 결정자인 [교수명]이 후보키가 아니다.
  • [학번], [과목명], [교수명]을 한 테이블에 두는 것은 [교수명]이 결정자이지만 후보키가 아니기 때문에 보이스-코드 정규화를 만족하지 못한다.
  • [교수명]은 [과목명]에 직접 영향을 주기 때문에 [교수명], [과목명] 테이블로 분리하여 교수명이 후보키 역할을 하도록 하여 보이스-코드 정규화를 만족한다.

 

5. 제4정규형(4NF; Fourth Normal Form)

다치 종속성을 제거하고, 특정 속성값에 따라 선택적인 속성을 분리한다.
  • 다치 종속성이란 한 속성이 두 개 이상의 독립적인 다치 종속성을 가질 때 발생한다.
  • 제4정규형은 이러한 다치 종속성을 제거하는 것을 목표로 한다.

  • [개발자]마다 [자격증] 값들이 여러 개 존재하고, 특정 [개발자]마다 [언어] 값들이 여러 개 존재하는 경우 다치 종속 관계라고 한다.
  • [개발자]별로 여러 [자격증] 값을 가지고 있고, [개발자]별로 여러 [언어] 값을 가지고 있으므로 [개발자], [자격증] 테이블과 [개발자], [언어] 테이블로 분리하여 관리하면 다치 종속 관계를 제거하기 때문에 4차 정규화를 만족한다.

 

6. 제5정규형(5NF; Fifth Normal From)

조인 종속성을 제거한다.
  • 제5정규형은 가능한 모든 조인 종속성이 제거된 상태로, 더 이상 테이블을 분해할 수 없는 상태를 말한다.

 

  • 제4정규형에 대해 조인 연산을 수행하면 4차 정규화 수행 전 데이터와 다르게 되는 문제인 조인 종속이 발생한다.

 

  • 조인 종속 관계를 제거하기 위해서는 모든 속성 관계인 [개발자], [자격증]과 [개발자], [언어] 뿐 아니라 [자격증], [언어] 관계에 대한 테이블을 만들어 줌으로써 조인했을 때 정확히 원래의 데이터로 복원할 수 있게 한다.

 


이상 현상(Anomaly)

데이터의 중복성으로 인해 릴레이션을 조작할 때 발생하는 비합리적 현상
이상 현상 설명
삽입 이상 정보 저장 시 해당 정보의 불필요한 세부 정보를 입력해야 하는 경우
삭제 이상 정보 삭제 시 원치 않는 다른 정보가 같이 삭제되는 경우
갱신 이상 중복 데이터 중에서 특정 부분만 수정되어 중복된 값이 모순을 일으키는 경우

 

예시

[이상 현상 설명 테이블]

 

[삽입 이상]

  • 202003 학번을 가진 '이철수'라는 학생을 등록할 경우, 지도교수가 정해지지 않으면 삽입할 수 없다.

 

[삭제 이상]

  • '이 교수'라는 교수가 퇴사할 경우, '김영희' 학생 정보도 같이 삭제된다.

 

[갱신 이상]

  • '홍길동'이라는 학생이 지도교수를 '이 교수'로 변경할 경우, '이 교수'의 교수번호가 2, 3 모두 있게 되어 중복된 값이 모순을 일으킨다.

함수 종속(FD; Functional Dependency)

릴레이션에서 속성의 의미와 속성 간 상호 관계로부터 발생하는 제약조건

 

결정자/종속자

X → Y 관계일 때, X는 결정자(Determinant)이고, Y는 종속자(Dependent)이다.

 

함수 종속 종류

종류 설명
부분 함수 종속
(Partial Functional Dependency)
릴레이션에서 기본키가 복합키일 경우, 기본키를 구성하는 속성 중 일부에게 종속된 경우
완전 함수 종속
(Full Functional Dependency)
릴레이션에서 X → Y 관계가 있을 때, Y는 X의 전체 속성에 대해 종속하고 부분 집합 속성에 종속하지 않는 경우
이행 함수 종속
(Transitive Functional Dependency)
릴레이션에서서 X → Y, Y → Z 종속 관계가 있을 때, X → Z가 성립되는 경우

 


반 정규화(De-Normalization)

정규화된 엔티티, 속성, 관계에 대해 성능 향상과 개발 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법
  • 비정규화, 역정규화라고도 불린다.

 

반 정규화 특징

  • 반 정규화된 데이터 구조는 성능 향상과 관리의 효율성이 증가한다.
  • 데이터의 일관성 및 정합성이 저하된다.
  • 유지를 위한 비용이 별도로 발생하여 성능에 나쁜 영향을 미칠 수 있다.
  • 반 정규화를 위해서는 데이터의 일관성과 무결성을 우선으로 할지, 데이터베이스의 성능과 단순화에 우선순위를 둘 것인지를 비교하여 조정하는 과정이 중요하다.

 

반 정규화 기법