ホームページ >データベース >mysql チュートリアル >学生向けの複数のコースをデータベースに効率的に保存するにはどうすればよいですか?
単一のデータベース テーブルに複数のオプションを保存する
問題: 結果を計算するデータベースを設計したいと考えています。学生は複数のコースを関連付けることができるため、データベース内に配列を保存できるフィールドが必要になります。
解決策:
データ正規化の原則:
特定のデータベース設計手法に入る前に、理解しておくことが重要です。データ正規化の原則。学生やコースなどの異なるエンティティに対して個別のテーブルを作成することで、データの重複を防ぎ、参照整合性を維持します。
データベース構造:
それぞれに複数のコースを保存するには学生の場合、SCJunction というジャンクション テーブルが使用されます。このテーブルは、学生 ID、コース ID、および出席や成績などのその他の関連情報を関連付けます。列 (studentId、courseId、term) の複合インデックスにより、データの高速な取得が保証され、重複したデータ エントリが防止されます。
データベース構造の例:
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) );
利点:
注: 複数のオプションを 1 つのフィールドに配列として保存すると便利に思えるかもしれませんが、一般的にはお勧めできません。データベース設計用。このアプローチは、パフォーマンスの問題やデータ処理の問題を引き起こす可能性があります。ジャンクション テーブルは、多対多のリレーションシップを格納するための、より構造化された効率的なソリューションを提供します。
以上が学生向けの複数のコースをデータベースに効率的に保存するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。