학번만 알면 이름과 학과가 정해지므로 수강 행마다 반복하지 않는다.
분리 전 수강 원장
복합키: 학번 + 과목코드
학번
이름
학과
과목코드
과목명
교수
성적
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-
김철수의 학과 변경은 학생 테이블 한 행만 바꾼다.
아직 수강생이 없는 과목도 과목 테이블에 먼저 등록한다.
마지막 수강 기록을 지워도 학생·과목 정보는 남는다.