| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- dfs
- 백준
- 백준 알고리즘
- backjoon
- CKLU
- 개발
- 네트워크
- 익명객체
- 너비탐색
- 프로그래머스
- 다이나믹 프로그래밍
- dp
- 삼성sw문제
- 익명클래스
- 자바
- 재귀함수
- 현대오토에버 코딩테스트
- 안드로이드
- Android
- 조합
- BFS
- 언더라이터
- Java
- 데이터베이스
- 멀티스레드
- 금융IT
- 모바일
- 삼성SW테스트
- IT
- 알고리즘
- Today
- Total
Limky 삽질블로그
[DataBase] 정규화(Normalization)_제3정규형(3NF: Third Normal Form) 본문
[DataBase] 정규화(Normalization)_제3정규형(3NF: Third Normal Form)
Lim-Ky 2018. 10. 31. 22:31이전 글 : 2018/10/31 - [프로그래밍/DataBase] - [DataBase] 정규화(Normalization)_제1정규형(1NF: First Normal Form)
이전 글 : 2018/10/31 - [프로그래밍/DataBase] - [DataBase] 정규화(Normalization)_제2정규형(2NF: Second Normal Form)
3) 제3정규형(NF: Third Normal Form)
제 3정규형은, 제 1정규형, 제 2정규형을 만족하고, 이행적함수종속관계를 갖지 않는 것을 말합니다.
이행적함수종속관계란?? 만약 A값을 알 때,B값을 알 수 있고 B값을 알 때 C값을 알 수 있으면 이를 이행적함수종속관계라고 합니다. A-> B, B->C 와 같은 관계라고 보시면 됩니다.
자 왼쪽에 학생테이블을 봅시다. 학번을 기본키로 갖고 있습니다. 학번을 알 때, 학과명을 알 수 있습니다. 또한, 학과명을 알 때, 학과번호를 알 수 있습니다. 이는 이행적함수종속관계를 가진다고 볼 수 있습니다. (학번 -> 학과명, 학과명 -> 학과번호) 즉, 제 3정규형을 위반하고 있습니다.
만약 위와 같은 경우 어떤 문제점들이 있을까요?
1) 갱신이상
- 학과에 속한 학생이 늘어날수록 학과명과 학과번호가 중복으로 나타납니다. 만약 갱신시 하나라도 갱신하지 못하면 갱신이상을 발생시키기 때문에 문제가 될 수 있습니다.
2) 삭제이상
- 학생이 만약 한명만 등록되어 있고, 따로 학과에 관한 테이블이 없는 경우 학생을 삭제하면, 더이상 해당 학과에 대한 정보를 얻을 수 없습니다.
3) 삽입이상
- 학과는 존재하지만, 학생이 없는 경우 학번이 기본키이기 때문에 학번없이 학과를 등록할 수 없습니다.
종합해보면, 결국 학과를 관리하는 테이블을 따로 두고, 학생과 학과에 대한 정보를 관리하는 테이블을 두어 정규화를 이뤄야합니다. 이는 정규화의 특성입니다. 한꺼번에 여러 데이터들을 관리하는 것이 아니라, 쪼갤 수 있는 한 테이블을 쪼개 각각 따로 관리하여 이상현상의 영향도를 줄이는 것이라 생각하면 될 것 같습니다.
오른쪽 그림을 보면 하나로 관리되었던 학생테이블을 2개의 테이블로 쪼개 정규화 작업을 했습니다. 이행적종속관계가 없음을 알 수 있고 이는 제 3정규형을 만족한다고 볼 수 있습니다.
참 고: http://blog.naver.com/PostList.nhn?blogId=jinsol1
'프로그래밍 > DataBase' 카테고리의 다른 글
| [DataBase] 오라클(Oracle) 12c 설치하기 (1) | 2019.11.12 |
|---|---|
| [DataBase] 정규화(Normalization)_제2정규형(2NF: Second Normal Form) (2) | 2018.10.31 |
| [DataBase] 정규화(Normalization)_제1정규형(1NF: First Normal Form) (1) | 2018.10.31 |
| [DataBase] 무결성(Integrity) 제약조건이란? (0) | 2018.09.05 |
| [DataBase] 조건절에 특정 컬럼 값이 NULL이면 해당 테이블 전체조회, 컬럼 값이 있으면 테이블 조건 조회 (1) | 2018.06.29 |