문제 설명:
결과 계산 애플리케이션에서, 각 학생과 관련된 여러 강좌를 MySQL 데이터베이스에 저장해야 합니다. 학생들은 다양한 강좌를 첨부할 수 있으며 이러한 강좌를 효율적으로 저장하고 검색할 수 있는 데이터베이스 구조를 설계하는 방법에 대한 과제를 제시합니다.
해결책: 접합 테이블
데이터를 배열에 저장하는 것은 간단한 접근 방식처럼 보일 수 있지만 MySQL의 인덱싱 부족으로 인해 성능 저하 및 유지 관리 문제가 발생할 수 있습니다. 대신에 권장되는 접근 방식은 접합 테이블을 사용하는 것입니다.
접합 테이블은 기본 키를 연결하여 다른 두 테이블을 연결하는 테이블입니다. 이 경우 다음 열을 사용하여 SCJunction(Student/Course Junction) 테이블을 생성할 수 있습니다.
SCJunction | id | studentId | courseId | term | attendance | grade |
studentId 및courseId 열은 각각 Student 및 Course 테이블을 참조하는 외래 키입니다. 학기 열은 강좌를 수강한 학기를 나타냅니다.
Junction 테이블을 사용하면 각 학생은 자신과 연결된 여러 강좌를 가질 수 있으며 각 강좌는 여러 학생이 수강할 수 있습니다. 출석 및 성적 열을 사용하여 각 등록에 대한 추가 정보를 저장할 수 있습니다.
스키마 예시
create table student ( studentId int auto_increment primary key, fullName varchar(100) not null ); create table dept ( deptId int auto_increment primary key, deptName varchar(100) not null ); create table course ( courseId int auto_increment primary key, deptId int not null, courseName varchar(100) not null, CONSTRAINT fk_crs_dept FOREIGN KEY (deptId) REFERENCES dept(deptId) ); create table SCJunction ( id int auto_increment primary key, studentId int not null, courseId int not null, term int not null, attendance int not null, grade int not null, unique key(studentId,courseId,term), key (courseId,studentId), CONSTRAINT fk_sc_student FOREIGN KEY (studentId) REFERENCES student(studentId), CONSTRAINT fk_sc_courses FOREIGN KEY (courseId) REFERENCES course(courseId) );
데이터 인덱싱
SCJunction 테이블의 복합 인덱스는 StudentId 및 StudentId를 기반으로 데이터를 검색하는 쿼리의 성능을 향상시킵니다. 강좌ID 등록 용어로 검색하는 쿼리의 경우 용어 열에 대한 인덱스도 도움이 될 것입니다.
정션 테이블의 장점
위 내용은 MySQL 데이터베이스에서 학생의 여러 강좌 등록을 효율적으로 저장하고 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!