Maison >base de données >tutoriel mysql >Comment puis-je stocker efficacement plusieurs cours pour étudiants dans une base de données ?

Comment puis-je stocker efficacement plusieurs cours pour étudiants dans une base de données ?

DDD
DDDoriginal
2024-12-14 18:47:13472parcourir

How Can I Efficiently Store Multiple Courses for Students in a Database?

Stockage de plusieurs options dans une seule table de base de données

Problème : Vous souhaitez concevoir une base de données pour le calcul des résultats où les étudiants peuvent être associés à plusieurs cours, ce qui nécessite un champ dans la base de données pouvant stocker un éventail de cours. sujets.

Solution :

Principes de normalisation des données :

Avant de plonger dans des techniques de conception de bases de données spécifiques, il est crucial de comprendre principes de normalisation des données. En créant des tableaux séparés pour différentes entités, telles que les étudiants et les cours, vous évitez la redondance des données et maintenez l'intégrité référentielle.

Structure de la base de données :

Pour stocker plusieurs cours pour chacun étudiant, une table de jonction appelée SCJunction est utilisée. Ce tableau met en corrélation l'identifiant de l'étudiant, l'identifiant du cours et d'autres informations pertinentes, telles que l'assiduité et la note. Un index composite sur les colonnes (studentId, courseId, term) garantit une récupération rapide des données et évite les saisies de données en double.

Exemple de structure de base de données :

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)
);

Avantages :

  • Applique l'intégrité référentielle et empêche les données corruption
  • Utilise une indexation efficace pour une récupération rapide des données
  • Évite la redondance des données en stockant chaque entité dans une table séparée

Remarque : Pendant qu'il peut sembler pratique de stocker plusieurs options dans un seul champ sous forme de tableau, cela n'est généralement pas recommandé pour la conception de bases de données. Cette approche peut entraîner des problèmes de performances et des problèmes de gestion des données. Les tables de jonction offrent une solution plus structurée et plus efficace pour stocker les relations plusieurs-à-plusieurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn