2NF Violation

복합키의 일부가 정하는 열을 따로 떼어낸다

수강 원장의 키는 `학번 + 과목코드`지만 이름·학과는 학번만, 과목명·교수는 과목코드만 보면 결정됩니다.

검사복합키 일부만으로 정해지는 열이 있는가
이동부분 종속 열은 자기 결정자를 키로 하는 테이블로 이동
남김두 키가 함께 정하는 성적은 수강 테이블에 유지

분해 전 수강 원장

PK 학번 + 과목코드
학번 이름 학과 과목코드 과목명 교수 성적
1001 김철수 컴공 C10 DB 이교수 A
1001 김철수 컴공 C20 알고리즘 박교수 B+
1002 이영희 전자 C10 DB 이교수 A-
1001 · C10 · A 학생 김철수/컴공, 과목 DB/이교수 정보가 함께 반복 저장됩니다.
1001 · C20 · B+ 김철수/컴공은 같은 학생이라도 수강 행마다 다시 적힙니다.
1002 · C10 · A- DB/이교수는 같은 과목이라도 다른 학생 행에 다시 적힙니다.

노란 강조는 과목코드만으로, 붉은 강조는 학번만으로 이미 정해지는 반복 값입니다.

학번 이름, 학과를 결정 학생 정보는 학생 테이블로 이동합니다.
과목코드 과목명, 교수를 결정 과목 정보는 과목 테이블로 이동합니다.
학번 + 과목코드 성적을 결정 수강 사실과 성적만 관계 테이블에 남깁니다.

학생

PK 학번

학번이 정하는 이름·학과는 학생당 한 번만 저장합니다.

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

과목

PK 과목코드

과목코드가 정하는 과목명·교수도 과목당 한 번만 남깁니다.

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

수강

FK 학번 + FK 과목코드

수강 테이블에는 두 키가 함께 정하는 성적만 남습니다.

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

김철수의 학과 변경은 학생 테이블 한 행만 바꾸면 됩니다.

삽입 이상 감소

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

삭제 이상 감소

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