1. DB 정규화란?

DB 정규화란 삽입/갱신/삭제 시 발생하는 이상현상이 없도록, DB를 재설계하는 것을 말합니다. DB 정규화는 다음의 목적을 가집니다. 
  • 불필요한 데이터를 제거한다. 
  • 데이터 저장을 논리적이고 직관적이게 한다. 

빠른 이해를 위해 정규화를 하지 않았을 때의 문제점이 무엇인지 간단한 예를 들도록 하겠습니다. 

학번 

주소

 수강 과목

 21101002 

서울 

C언어 

 21101002 

서울 

Java 

21101003

중국 

Java 

  1. 21101002 학생의 주소가 변경 되었을 때, 2개의 Row를 각각 수정 해주어야합니다. 2개라 크게 안 와 닿을지 모르겠지만, 100개/1000개로 늘어나면 시스템에 과부하를 가져올 것입니다. 
  2. 21101003 학생이 Java 수업을 Drop할 경우, 학적에서 21101003 학생의 정보가 아예 사라집니다. 

간단한 예이지만 위와 같은 문제점을 예방하기 위해, 앞으로 배울 4개의 정규화 과정을 배워보도록 합니다. 


2. 1NF (1 정규화)

1정규화는 각 행마다 값을 한가지만 가지도록 합니다. 예를 통해 이해해도록 하겠습니다. 




학번

 교수

 학과

과목코드

학점 

20800399

김,박,정 

 컴퓨터공학

CSE011101, CSE022202, CSE033303

A,B,C 

21300758

 상담심리MEC011101 A 
21400001

 이 

 법학

POD032939

C

21500399

 컴퓨터공학CSE011101

20800399 학생은 '수강과목' 열에 2가지 값을 가지고 있습니다. 이에 다음과 같이 1정규화 합니다. 

학번 교수

학과 

과목코드 학점
20800399

컴퓨터공학 

CSE011101

 A

20800399

컴퓨터공학 

CSE022202

 B

20800399

정 

컴퓨터공학 

CSE033303

 C

21300758

병 

상담심리 

MEC011101

 A

21400001

이 

법학 

POD032939

 C

21500399

김 

컴퓨터공학 CSE011101 B

결과적으로 정규화를 함으로써, 데이터는 더 증가하였습니다. 이는 데이터의 논리성을 강화하기 위함입니다. 하지만 보이는 바와 같이 데이터가 늘어났습니다. 1정규화로는 아직 갈 길이 멉니다. 


3. 2NF

2차 정규화는 완전 함수 종속성을 만드는 것입니다. 즉, 기본키에 속하지 않은 함수들이 모두 기본키에 종속적이어야 합니다. 


학번

학과

지도교수
20800399

컴퓨터공학

20800399 

컴퓨터공학

20800399 

 컴퓨터공학

21300758

상담심리

21400001

법학

21500399

컴퓨터공학

학번과목코드성적
20800399CSE011101

A

20800399CSE022202B
20800399CSE033303

C

21300758MEC011101A
21400001POD032939

C

21500399CSE011101

B

4. 3NF

3NF는 이행적함수종속석을 제거함으로써 성립된다. 즉 아래 도표를 보면, '학과'는 '지도교수'와 '학번' 양쪽에 종속된다. 이를 분리시키는 것을 의미한다.


 
학번

학과

20800399

컴퓨터공학

21300758

상담심리

21400001

법학

21500399

컴퓨터공학

교수

학과

컴퓨터공학

컴퓨터공학

컴퓨터공학

상담심리

이  법학

학번

과목코드성적
20800399CSE011101

A

20800399CSE022202B
20800399CSE033303

C

21300758MEC011101A
21400001POD032939

C

21500399CSE011101

B




BCNF는 다음에...


+ Recent posts