>데이터 베이스 >MySQL 튜토리얼 >MySQL 데이터베이스에 학생당 여러 강좌를 효율적으로 저장하는 방법은 무엇입니까?

MySQL 데이터베이스에 학생당 여러 강좌를 효율적으로 저장하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-31 16:36:10638검색

How to Efficiently Store Multiple Courses per Student in a MySQL Database?

MySQL 데이터베이스에 학생을 위한 여러 강좌 저장

질문:

다음을 수행해야 합니다. 학생들이 여러 강좌를 첨부할 수 있는 데이터베이스 구조를 만듭니다. 이 데이터를 효율적으로 저장하도록 테이블을 설계하려면 어떻게 해야 합니까?

답변:

테이블 내의 배열에 데이터를 저장하는 것이 편리해 보일 수 있지만 성능 및 효율성 향상으로 이어질 수 있습니다. 데이터 무결성 문제. 더 나은 접근 방식은 별도의 테이블을 만들고 외래 키를 사용하여 테이블 간의 관계를 설정하는 것입니다.

다음은 권장되는 데이터베이스 구조입니다.

1. 학생 테이블 만들기

CREATE TABLE student (
  studentId INT AUTO_INCREMENT PRIMARY KEY,
  fullName VARCHAR(100) NOT NULL
);

2. 코스 테이블 만들기

CREATE TABLE course (
  courseId INT AUTO_INCREMENT PRIMARY KEY,
  courseName VARCHAR(100) NOT NULL
);

3. 접합 테이블 만들기(Student_Course)

CREATE TABLE student_course (
  studentId INT,
  courseId INT,
  PRIMARY KEY (studentId, courseId),
  FOREIGN KEY (studentId) REFERENCES student(studentId),
  FOREIGN KEY (courseId) REFERENCES course(courseId)
);

관계:

  • student_course 테이블은 접합 테이블 역할을 하여 학생을 코스에 연결합니다. 등록되어 있습니다.
  • student_course의 StudentId 열은 다음을 참조합니다. 학생 테이블의 StudentId입니다.
  • student_course의courseId 열은 강좌 테이블의 CourseId를 참조합니다.

예제 데이터:

-- Insert Students
INSERT INTO student (fullName) VALUES ('Alice Jones'), ('Bob Smith'), ('Carol White');

-- Insert Courses
INSERT INTO course (courseName) VALUES ('History 101'), ('Math 201'), ('English 301');

-- Enroll Students in Courses
INSERT INTO student_course (studentId, courseId) VALUES (1, 1), (1, 2), (2, 1), (2, 3);

정션의 장점 테이블:

  • 데이터 무결성: 외래 키는 테이블 간 참조의 일관성을 보장하여 데이터 손상을 줄입니다.
  • 효율적인 데이터 검색: 정션 테이블은 인덱스를 통해 관련 데이터를 빠르고 효율적으로 검색할 수 있습니다. 최적화.
  • 유연성: 여러 엔터티 간의 복잡한 관계를 관리할 수 있는 유연한 구조를 제공합니다.
  • 데이터 정규화: 정규화된 데이터를 유지하는 데 도움이 됩니다. 데이터의 다양한 측면을 별도의 테이블로 분리합니다.

위 내용은 MySQL 데이터베이스에 학생당 여러 강좌를 효율적으로 저장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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