1. DB 정규화란?
- 불필요한 데이터를 제거한다.
- 데이터 저장을 논리적이고 직관적이게 한다.
빠른 이해를 위해 정규화를 하지 않았을 때의 문제점이 무엇인지 간단한 예를 들도록 하겠습니다.
학번 |
주소 |
수강 과목 |
21101002 |
서울 |
C언어 |
21101002 |
서울 |
Java |
21101003 |
중국 |
Java |
- 21101002 학생의 주소가 변경 되었을 때, 2개의 Row를 각각 수정 해주어야합니다. 2개라 크게 안 와 닿을지 모르겠지만, 100개/1000개로 늘어나면 시스템에 과부하를 가져올 것입니다.
- 21101003 학생이 Java 수업을 Drop할 경우, 학적에서 21101003 학생의 정보가 아예 사라집니다.
간단한 예이지만 위와 같은 문제점을 예방하기 위해, 앞으로 배울 4개의 정규화 과정을 배워보도록 합니다.
2. 1NF (1 정규화)
학번 | 교수 | 학과 | 과목코드 | 학점 |
---|---|---|---|---|
20800399 | 김,박,정 | 컴퓨터공학 | CSE011101, CSE022202, CSE033303 | A,B,C |
21300758 | 병 | 상담심리 | MEC011101 | A |
21400001 | 이 | 법학 | POD032939 | C |
21500399 | 김 | 컴퓨터공학 | CSE011101 | B |
20800399 학생은 '수강과목' 열에 2가지 값을 가지고 있습니다. 이에 다음과 같이 1정규화 합니다.
학번 | 교수 | 학과 | 과목코드 | 학점 |
---|---|---|---|---|
20800399 | 김 | 컴퓨터공학 | CSE011101 | A |
20800399 | 박 | 컴퓨터공학 | CSE022202 | B |
20800399 | 정 | 컴퓨터공학 | CSE033303 | C |
21300758 | 병 | 상담심리 | MEC011101 | A |
21400001 | 이 | 법학 | POD032939 | C |
21500399 | 김 | 컴퓨터공학 | CSE011101 | B |
결과적으로 정규화를 함으로써, 데이터는 더 증가하였습니다. 이는 데이터의 논리성을 강화하기 위함입니다. 하지만 보이는 바와 같이 데이터가 늘어났습니다. 1정규화로는 아직 갈 길이 멉니다.
3. 2NF
학번 | 학과 | 지도교수 |
---|---|---|
20800399 | 컴퓨터공학 | 김 |
20800399 | 컴퓨터공학 | 박 |
20800399 | 컴퓨터공학 | 정 |
21300758 | 상담심리 | 병 |
21400001 | 법학 | 이 |
21500399 | 컴퓨터공학 | 김 |
학번 | 과목코드 | 성적 |
---|---|---|
20800399 | CSE011101 | A |
20800399 | CSE022202 | B |
20800399 | CSE033303 | C |
21300758 | MEC011101 | A |
21400001 | POD032939 | C |
21500399 | CSE011101 | B |
4. 3NF
학번 | 학과 |
---|---|
20800399 | 컴퓨터공학 |
21300758 | 상담심리 |
21400001 | 법학 |
21500399 | 컴퓨터공학 |
교수 | 학과 |
---|---|
김 | 컴퓨터공학 |
박 | 컴퓨터공학 |
정 | 컴퓨터공학 |
병 | 상담심리 |
이 | 법학 |
학번 | 과목코드 | 성적 |
---|---|---|
20800399 | CSE011101 | A |
20800399 | CSE022202 | B |
20800399 | CSE033303 | C |
21300758 | MEC011101 | A |
21400001 | POD032939 | C |
21500399 | CSE011101 | B |