제3정규형

이행 종속의 중간 속성을 새 테이블의 키로 둔다

학번이 학과를 정하고, 학과가 학과장을 정하면 학과장은 학생이 아니라 학과에 속한 사실이다. 중간 속성인 학과를 별도 테이블의 키로 빼면 반복과 갱신 오류가 줄어든다.

기본키

학번은 학생 행을 식별한다

학번 이름

학생 테이블의 한 행을 찾는 출발점이다.

중간 속성

학과가 다시 학과장을 결정한다

학과 학과장

학과장은 학생마다 반복될 값이 아니라 학과에 매달린 값이다.

분해 기준

학과를 새 테이블의 키로 올린다

학생에는 학과 참조만 남기고, 학과별 사실은 한곳에서 관리한다.

분해 전

학생 행마다 학과장이 반복된다

학생_전체
학번이름학과학과장
1001김철수컴공정교수
1003박민수컴공정교수
1002이영희전자한교수

컴공 학과장이 바뀌면 컴공 학생 행을 모두 찾아 같은 값을 고쳐야 한다.

분해 후

학생 사실과 학과 사실을 분리한다

학생
학번이름학과
1001김철수컴공
1003박민수컴공
1002이영희전자
학과
학과학과장
컴공정교수
전자한교수
1
수정 학과장 변경은 학과 테이블 한 행만 수정한다.
2
삽입 학생이 아직 없어도 새 학과를 먼저 등록할 수 있다.
3
삭제 마지막 학생을 지워도 학과장 정보가 사라지지 않는다.

기준: 기본키가 아닌 속성이 또 다른 기본키가 아닌 속성을 결정하면, 그 결정자를 새 테이블의 키로 삼아 분해한다.