2NF 분해

학번이 결정하는 학생 정보는 분리하고, 수강 기록만 복합키에 남깁니다.

학번 → 이름, 학과 는 학생의 고정 상태이고, {학번, 과목명} → 성적 은 수강마다 달라지는 정보입니다. 두 역할을 나누면 학생 정보가 수강 행의 생성·수정·삭제에 끌려가지 않습니다.

학생 테이블

학번 하나로 결정되는 속성만 따로 보관

PK: 학번
학번 이름 학과
1001 김철수 컴공
1002 이영희 전자
핵심: 수강 내역이 없어도 학생 자체는 먼저 등록할 수 있습니다.

수강 테이블

학생 1명이 여러 과목을 들을 수 있는 반복 기록

PK: {학번, 과목명}
학번 과목명 성적
1001 DB A
1001 알고리즘 B+
1002 DB A+
관계: 수강 행은 학번으로 학생 테이블을 참조하고, 성적은 과목별로 따로 기록됩니다.
분해 기준
학생의 신원 정보과목별 수강 기록을 분리하면, 학생 상태는 한 곳에서 유지되고 수강 행은 필요할 때만 추가·삭제됩니다.
이상 현상 해소
삽입
1003 / 박민수 / 컴공 처럼 수강 과목이 없어도 학생 테이블에 먼저 등록할 수 있습니다.
갱신
1001 학과: 컴공 → 소프트웨어 변경은 학생 테이블의 한 행만 수정하면 끝납니다.
삭제
1002 / DB / A+ 수강 행을 지워도 이영희의 이름과 학과는 학생 테이블에 남습니다.