본문 바로가기
My Image
프로그래밍/DataBase

[DataBase] 정규화(Normalization)_제3정규형(3NF: Third Normal Form)

by Lim-Ky 2018. 10. 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



















반응형

댓글