이전 글 : 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 |
댓글