다음 수강 릴레이션을 제2정규형에 맞게 분해하고 각 기본키와 분해 이유를 쓰시오.
| student_id | student_name | course_id | course_name | grade |
|---|---|---|---|---|
| S01 | 강하늘 | C10 | 데이터베이스 | A |
기본키: (student_id, course_id)
함수 종속: student_id → student_name / course_id → course_name / (student_id, course_id) → grade
모범답안
STUDENT(student_id PK, student_name), COURSE(course_id PK, course_name), ENROLLMENT(student_id PK/FK, course_id PK/FK, grade)로 분해한다. student_name과 course_name이 복합 기본키 전체가 아닌 일부에만 종속되는 부분 함수 종속을 제거하기 위한 것이다.
풀이와 판단 근거
제2정규형은 제1정규형을 만족하면서 기본키가 아닌 모든 속성이 기본키 전체에 완전 함수 종속되어야 한다. student_name은 복합키 중 student_id에만, course_name은 course_id에만 종속되므로 부분 함수 종속이 존재한다.
학생·과목·수강 사실을 분리하면 이름이 여러 수강 행에 반복되는 문제와 수정·삽입·삭제 이상을 줄이면서 grade는 복합키 전체에 종속된 상태를 유지한다.
자주 틀리는 지점
- 부분 함수 종속을 이행 함수 종속이라고 설명
- grade를 STUDENT나 COURSE에 배치
- ENROLLMENT의 복합 기본키를 하나의 열로 변경
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.