DB 정규형 1NF, 2NF, 3NF
정규화란?
영어로는 nomalization.
함수의 종속성(Functional Dependency)을 이용하여 서로 연관된 속성끼리 연결하고 삽입,삭제, 변경이상을 없게 만드는 과정을 말한다. 정규화된 정도에 따라 1NF, 2NF, 3NF, BCNF, 4NF, 5NF (NF: Normal Form) 으로 분류가 되며 숫자가 커질수록 제약조건이 까다로워진다. (함수의 종속성과 이상현상 공부 여기 )
1NF(First Normal Form)
모든 도메인이 원자값(automic value)인 릴레이션.
관계형 데이터베이스의 대표적인 특징중 하나가 모든 도메인이 원자값(automic value)으로 이루어져있다는 것이다.
-
- 삽입이상
- 500번 학생과 지도교수가 P4 라는 사실을 삽입하려 할 때 어떤 과목을 등록하지 않는 한 삽입할 수 없다.
-
- 삭제이상
- 200번 학생이 C123등록을 취소하여 이 튜플이 삭제되면 200번 학생의 지도교수가 P2라는 사실도 같이 삭제된다.
-
- 갱신이상
- 400번 학생의 지도교수를 P3로 바꾸려면 400번 학생의 모든 튜플의 지도교수를 다 바꿔야한다.
- 1NF의 이상원인
- 기본 키값의 부분함수종속이 존재하기 때문.
위 경우에서 수강지도 릴레이션은 학번과 과목번호로 튜플들을 unique하게 나눌수 있음.
종속관계를 살펴보면 다음과 같다.성적 -> {학번, 과목번호} 학과, 지도교수 -> {학번} 학과 -> 지도교수성적은 학번과 과목번호에 종속되는 반면 학과와 지도교수는 학번에만 종속되는 부분함수종속이 존재한다. 부분함수종속되는 애트리뷰트들이 불필요하게 중복되는것이 이상을 야기한다. 즉 부분함수종속의 존재가 이상이 일어나는 원인이다.
2NF(Second Normal Form)
1NF의 이상을 해결하기 위해서 부분함수종속되는 애트리뷰트들을 따로 분리시킬 수 있다.(중복이 줄어듦) 이렇게 부분함수종속을 분리하여 모든 애트리뷰트들이 기본키에 완전 함수종속이 되게 하면 이를 2NF라 한다.
이 릴레이션들의 함수종속을 살펴보면 다음과 같이 모두 완전한수종속인 것을 확인 할 수 있다.
그러나 2NF에서도 이상이 존재한다.
-
- 삽입이상
- 어떤 지도교수가 특정학과에 속한다는 사실을 삽입할 수 없음. 키값이 학번이므로..
-
- 삭제이상
- 학번 300을 삭제하면 지도교수 P3가 컴퓨터학과에 소속된다는 사실도 삭제된다.
-
- 갱신이상
- 지도교수 P1의 소속을 컴퓨터과에서 전기과로 바꾼다면 학번 100번과 400번 모두 바뀌어야한다.
- 2NF의 이상원인
- 지도 릴레이션의 종속관계를 살펴보면
학번 -> 지도교수 학번 -> 학과 지도교수 -> 학과인데 이처럼 A -> C, A -> B, B -> C 일 때 C를 A의 이행적 종속 이라 말한다.
이러한 이행적 함수종속으로 인해 이상현상이 일어난다.
# 3NF(Third Normal Form)
2NF에서 이행적 함수관계들을 모두 제거한 것이 3NF이다.
2NF를 프로젝션하여 만든다.
학생지도 릴레이션의 지도교수는 지도교수학과 릴레이션의 외래키가 된다.
모든 이원릴레이션은 3NF에 속한다.
약점: 복수의 후보키가 있고 후보키가 복수의 애트리뷰트로 이루어져있고 후보키에서 중첩이 있다면 3NF를 적용 할 수 없다.
한 과목을 여러명의 교수가 맡을 수 있다는 제약조건의 릴레이션이다.
이행적 함수종속이 없으므로 3NF이다.
후보키: {학번, 교수}, {학번, 과목}
복수의 후보키 & 후보키중 중첩 애트리뷰트 {학번} 존재
- 삽입이상: 교수 P5가 프로그래밍을 맡는다는 튜플을 삽입하면 무조건 학생 한명을 같이 삽입해야한다.
- 삭제이상: 학번 100번이 자료구조를 수강한다는 사실을 삭제하면 담당교수가 P2라는 사실도 삭제된다.
- 갱신이상: 프로그래밍의 담당교수를 P5로 바꾸면 모든 P1을 다 바꿔야한다.
이상의 원인: 교수가 결정자(determinent)이지만 후보키가 아님.