ホームページ >データベース >mysql チュートリアル >学生ごとに複数のコースを MySQL データベースに効率的に保存するにはどうすればよいですか?

学生ごとに複数のコースを MySQL データベースに効率的に保存するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-31 16:36:10629ブラウズ

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

MySQL データベースに学生用の複数のコースを保存する

質問:

学生が複数のコースを関連付けることができるデータベース構造を作成します。このデータを効率的に格納するテーブルを設計するにはどうすればよいですか?

答え:

テーブル内の配列にデータを格納することは便利に思えるかもしれませんが、パフォーマンスやパフォーマンスに悪影響を及ぼす可能性があります。データの整合性の問題。より良いアプローチは、個別のテーブルを作成し、外部キーを使用してテーブル間の関係を確立することです。

推奨されるデータベース構造は次のとおりです。

1. Student テーブルを作成します

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 列は、 Student テーブルのstudentId。
  • student_course の courseId 列は、course テーブルの 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。