2정규형 점검

부분 함수 종속 분리

복합키 전체가 아니라 학번이나 과목코드만으로 정해지는 속성은 별도 테이블로 옮기고, 수강 테이블에는 관계를 설명하는 값만 남긴다.

학번이름, 학과
과목코드과목명, 교수
학번+과목성적
학번 결정 속성 과목코드 결정 속성 복합키 전체 속성
분리 전 학번·과목코드가 한 원장에 섞이면 같은 값이 반복 저장된다.
부분 종속 키 일부만으로 정해지는 이름·학과·과목명·교수는 따로 둔다.
남길 값 수강 테이블에는 두 키가 함께 있어야 정해지는 성적만 남긴다.

원장의 열은 결정자를 따라 세 묶음으로 갈라진다

복합키 전체가 아니라 일부 키만 따라가는 열이 부분 함수 종속이다.

attribute ownership
학번 이름 학과 과목코드 과목명 교수 성적
학생 테이블로 이동

학번만 알면 이름과 학과가 정해지므로 수강 행마다 반복하지 않는다.

과목 테이블로 이동

과목코드만 알면 과목명과 교수가 정해지므로 과목 정보는 한 번만 둔다.

수강 테이블에 유지

성적은 학번과 과목코드가 함께 있어야 결정되므로 관계 테이블에 남긴다.

분리 전 수강 원장

복합키: 학번 + 과목코드
학번 이름 학과 과목코드 과목명 교수 성적
1001김철수컴공 C10DB이교수A
1001김철수컴공 C20알고리즘박교수B+
1002이영희전자 C10DB이교수A-
학생1001 · 김철수 · 컴공
과목C10 · DB · 이교수
수강성적 A
학생1001 · 김철수 · 컴공
과목C20 · 알고리즘 · 박교수
수강성적 B+
학생1002 · 이영희 · 전자
과목C10 · DB · 이교수
수강성적 A-

이름·학과·과목명·교수는 수강 사실이 반복될 때마다 중복 저장된다.

학번 이름 · 학과

복합키의 일부만으로 학생 속성이 정해지므로 분리한다.

과목코드 과목명 · 교수

과목 속성도 과목코드만 따라가므로 수강 원장에서 뺀다.

학번 + 과목 성적

성적은 두 키가 함께 있어야 결정되므로 수강 테이블에 남긴다.

학생

PK 학번
학번이름학과
1001김철수컴공
1002이영희전자

과목

PK 과목코드
과목코드과목명교수
C10DB이교수
C20알고리즘박교수

수강

FK 2개 + 성적
학번과목코드성적
1001C10A
1001C20B+
1002C10A-
갱신 이상 감소

김철수의 학과 변경은 학생 테이블 한 행만 바꾼다.

삽입 이상 감소

아직 수강생이 없는 과목도 과목 테이블에 먼저 등록한다.

삭제 이상 감소

마지막 수강 기록을 지워도 학생·과목 정보는 남는다.