종속 관계 지도

속성은 직접 결정하는 키 쪽으로 이동한다

정규화는 속성을 아무렇게나 쪼개는 일이 아니다. 각 속성을 직접 결정하는 키를 찾고, 같은 결정자를 가진 속성끼리 테이블을 만든다.

1. 원본 관찰 한 행에 여러 주제가 섞였는가 학생, 과목, 수강 사실을 색으로 분리해 본다.
2. 결정자 표시 어떤 값이 어떤 속성을 고정하는가 학번과 과목코드가 각각 직접 결정하는 영역을 찾는다.
3. 테이블 이동 직접 결정하는 키 옆에 둔다 같은 결정자를 공유하는 속성은 같은 테이블에 모은다.
4. 조인 검증 원본 의미가 다시 복원되는가 외래키와 복합키로 원래 수강 행을 재구성한다.

원본 수강 테이블

반복 위험

기본키는 학번 + 과목코드지만 학생명, 학과, 과목명, 교수는 그 전체 키가 아니라 일부 키만 보고도 정해진다.

학번 학생명 학과 과목코드 과목명 교수 성적
S01 민서 컴공 C10 DB 김교수 A
S01 민서 컴공 C20 OS 박교수 B+
S02 지훈 통계 C10 DB 김교수 A-

직접 결정 관계

함수 종속

속성은 “포함된 키”가 아니라 “직접 결정하는 키” 쪽으로 간다. 성적만 복합키 전체가 필요하다.

학번 학생명, 학과
과목코드 과목명, 교수
학번 + 과목코드 성적

분해 결과

3NF 관점

반복되던 설명 속성은 별도 테이블로 빠지고, 수강 테이블은 외래키와 성적만 보관한다.

학생(학번, 학생명, 학과)

학생 속성은 학번 한 번만 수정한다.

과목(과목코드, 과목명, 교수)

과목 설명은 수강 행마다 반복하지 않는다.

수강(학번, 과목코드, 성적)

두 외래키의 조합이 한 학생의 한 과목 수강을 의미한다.

1
갱신 위치가 하나인가 학생 학과가 바뀌면 학생 테이블 한 행만 바뀐다.
2
부분 종속이 사라졌는가 성적 외의 속성은 복합키 일부에 매달리지 않는다.
3
원래 의미가 복원되는가 학생, 과목, 수강을 조인하면 원본 수강 행이 돌아온다.
학번 과목코드 학생 과목 수강 원본 행
학생 테이블 학번 하나가 학생명과 학과를 안정적으로 결정한다.
S01민서컴공
수강 테이블 복합키가 학생과 과목 사이의 사실만 보관한다.
S01C10A
과목 테이블 과목코드가 과목명과 교수를 한 번만 결정한다.
C10DB김교수