>데이터 베이스 >MySQL 튜토리얼 >MySQL 데이터베이스에서 학생의 여러 강좌 등록을 효율적으로 저장하고 검색하려면 어떻게 해야 합니까?

MySQL 데이터베이스에서 학생의 여러 강좌 등록을 효율적으로 저장하고 검색하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-16 10:09:09990검색

How Can I Efficiently Store and Retrieve Multiple Course Enrollments for Students in a MySQL Database?

단일 테이블에 여러 옵션을 저장하기 위한 데이터베이스 설계

문제 설명:

결과 계산 애플리케이션에서, 각 학생과 관련된 여러 강좌를 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 등록 용어로 검색하는 쿼리의 경우 용어 열에 대한 인덱스도 도움이 될 것입니다.

정션 테이블의 장점

  • 참조 무결성: 접합 테이블은 참조 무결성을 강화하여 학생과 강좌가 데이터베이스에 등록되기 전에 존재하도록 보장합니다. SCJunction 테이블.
  • 간편한 확장: Junction 테이블을 사용하면 추가 데이터에 대한 새 열을 쉽게 추가할 수 있습니다.
  • 효율적인 저장: Junction 테이블은 데이터 중복을 방지하여 저장 공간을 확보합니다.
  • 유연함 관계: 접합 테이블은 여러 테이블 간의 다대다 관계를 나타내는 데 사용할 수 있습니다.

위 내용은 MySQL 데이터베이스에서 학생의 여러 강좌 등록을 효율적으로 저장하고 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.