Notice
Recent Posts
Recent Comments
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

Normalization 정규화 본문

IT/Computer Science

Normalization 정규화

빌드이너프 2023. 2. 2. 10:52

정규화(Normalization)

  • 관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상 현상을 방지하고, 데이터의 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정

이상 현상(Anomaly)

  • 데이터의 중복성으로 인해 릴레이션을 조작할 때 발생하는 비합리적 현상

데이터베이스 이상 현상

이상 현상 설명
삽입 이상 정보 저장 시 해당 정보의 불필요한 세부정보를 입력해야 하는 경우
삭제 이상 정보 삭제 시 원치 않는 다른 정보가 같이 삭제되는 경우
갱신 이상 중복 데이터 중에서 특정 부분만 수정되어 중복된 값이 모순을 일으키는 경우

이상 현상 설명 테이블

학번 이름 교수번호 지도교수
202301 홍길동 1 김 교수
202302 김영희 2 이 교수

 

삽입 이상

학번 이름 교수번호 지도교수
202301 홍길동 1 김 교수
202302 김영희 2 이 교수
202303 이철수 ? ?
  • 202303 학번을 가진 '이철수'라는 학생을 등록할 경우 지도교수가 정해지지 않으면 삽입할 수 없음

 

삭제 이상

학번 이름 교수번호 지도교수
202301 홍길동 1 김 교수
202302 김영희 2 이 교수
  • '이 교수'라는 교수가 퇴사할 경우 '김영희' 학생 정보도 같이 삭제됨

 

갱신 이상

학번 이름 교수번호 지도교수
202301 홍길동 3 박 교수
202302 김영희 2 이 교수
  • '홍길동'이라는 학생이 지도교수를 변경할 경우 '김 교수'의 정보('김 교수'의 교수번호 1번)가 없어짐

정규화 단계

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

 

1차 정규화(1NF)

1차 정규화

  • 테이블 내의 속성 값은 원자 값을 가지고 있어야 함
  • 원자 값으로 구성, 반복 속성/중복 제거가 필요함
  • 이메일 주소가 속성에 2개 이상 가지고 있는 경우 원자값이 아니기 때문에 속성 1개만 가지도록 저장하면 1차 정규화를 만족함

2차 정규화(2NF)

2차 정규화

 

2차 정규화 함수 종속

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

3차 정규화(3NF)

3차 정규화
3차 정규화 함수 종속

  • 이행함수 종속 제거, 속성에 종속적인 속성을 분리함
  • 이행함수 종속 관계: <책번호>가 <출판사>에 영향을 줌[A -> B], <출판사>가 <홈페이지>에 영향을 줌[B -> C]
  • <책번호, 출판사, 홈페이지>를 한 테이블에 두는 것은 이행함수 종속성으로 인해 3차 정규화를 만족하지 못함
  • <책번호>는 <홈페이지>에 직접 영향을 주는 관계가 아니기 때문에(A -> C 관계), <책번호, 출판사> 테이블, <출판사, 홈페이지> 테이블로 분리하여 이행 함수 관계를 제거하여 3차 정규화를 만족함

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

보이스-코드 정규화
보이스-코드 정규화 함수 종속

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

4차 정규화(4NF)

4차 정규화
4차 정규화 관계

  • 다치(다중 값) 종속 제거, 특정 속성값에 따라 선택적인 속성을 분리함
  • 다치 종속 관계: <개발자>마다 <자격증> 값들이 여러 개 존재하고, 특정 <개발자>마다 <언어> 값들이 여러 개 존재하는 경우
  • <개발자> 별로 여러 <자격증> 값을 가지고 있고, <개발자> 별로 여러 <언어> 값을 가지고 있으므로                                                <개발자, 자격증>, <개발자, 언어> 테이블로 분리하여 관리하면 다치 종속 관계를 제거하기 때문에 4차 정규화 만족함

5차 정규화(5NF)

4차 정규화에서 조인 연산 후 결과

  • 4차 정규화 테이블에 대해 조인 연산(⋈)을 수행하면 4차 정규화 수행 전 데이터와 다르게 되는 문제인 조인 종속이 발생함

 

5차 정규화
5차 정규화 관계

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

 

 


참고자료

수제비 정보처리기사 실기 3-10 ~ 3-17

'IT > Computer Science' 카테고리의 다른 글

IPC(Inter Process Communication)  (1) 2023.02.06
GET방식 / POST 방식  (0) 2023.02.03
Agile 애자일  (0) 2023.02.01
Test Driven Develop(TDD)  (0) 2023.01.31
DB Index  (0) 2023.01.30