je fait un site pour profs et élèves et je galère un peu sur le duo table - requête. Je pose mes tables :
TABLE ELEVES avec id, prenom, nom et classe
TABLE CLASSE avec id, nom, niveau, localisation
TABLE DM (devoir maison) avec id, nom, consignes
TABLE EXE : avec id, qcms (plusieurs questions en qcm par exe) --> définit un exercice car qcms donne les liste des questions
TABLE EVAL (notation-evaluation) : id, id_elev, note, id_distri, date --> associe une note à un élève pour un travail donné à une classe (table distri)
TABLE DISTRI (distribution) : id, id_classe, date ... et là je coince. --> Pour une classe, attribue un exercice ou un devoir maison
Au final, je veux qu'un prof puisse avoir un tableau par classe avec une ligne par élève et pour chacun, les résultats de ses évaluations . Mais ces évaluations sont soit des DM (devoir maison) soit des EXE (plusieurs qcm), avec les types, nom et date sont en tête de tableau.
Option 1 la TABLE distri contient deux champs : type (DM ou EXE) puis l'id dans le type. type=dm et exe:12 -> lire dans la table DM la ligne 12
Option 2 la TABLE distri contient deux champ : id_dm et id_exe. Si la valeur est zéro, on ne lit rien, sinon on lit la table qui a une valeur.
Option 3 j'envoie les données brutes au client et traite les trois listes (elèves, nom des dm ou qcm noté, résultat) en javascript, ce qui soulage le serveur. (?)
J'ai cherché en sql le moyen de sélectionner une table en fonction des réponses d'une requête , le tout dans une seule requête mais je n'ai rien trouvé.
Je tente donc de faire une première requête, de lire la réponse en PHP pour ensuite lire une table ou une autre dans une seconde requête afin récupérer mes résultats. Cela doit fonctionner mais me semble bien lourd.
Enfin, pour des raisons de vélocité du site, je ne travaille pas avec des bibliothèques mais code tout "à la pogne". Si mon site concerne 5 000 profs, avec 6 classes par prof, et 30 elèves par classe , il y aura pas mal de connexion, c'est pourquoi j'opte pour alléger le serveur au maximum et faire des traitements coté client si possible. Mais une bonne requête vaut mieux que des traitements à la gomme !
Dés élément de réponses pour ce petit problème ?
Merci d'avance
Si on faisait toujours comme "on a toujours fait", on en serait encore à l'âge des cavernes.
Manifestement tu as parfaitement modélisé mes tables.
J'ai pensé comme tu l'as précisé la liaison des tables comme tu l'as fais (sans être foutu de retenir le vocabulaire MCD ou MLD) ni même retenir les (0,n). J'arrive à la même chose à un chouia près.
J'ai bien une table pour les qcm -> QCM qui contient une question, 4 réponses et 3 correctiones une table EXE qui comprend plusieurs (au choix) qcm.
Pas de table qui servent de lien entre EXE et QCM : je trouve plus simple, logique et rapide de mettre une colonne id_qcm avec les id des qcm dans une string : 22|143|1227|5812 ou les 4 nombres sont les id des qcm. Par principe, un qcm n'apparait que dans un seul EXE. De même les élèves on directement une colonne id_classe (un élève est toujours rattaché à une et un seule classe), en revanche j'ai bien une table prof-classe.
Mais sur ton schéma, il y a triangle XT et je ne sais pas bien à quoi ca correspond ni comment ca fonctionne et en effet, c'est bien l'objet de ma question initiale . Comment, une fois un travail fini, aller chercher la note de l'élève dans une table OU une autre pour les devoirs maison ou les QCM. Parmis mes deux option, laquelle est la plus judicieuse pour avoir le résultat souhaité ?
PS. je croyais avoir envoyé le msg il y a longtemps mais en confinement, on peut être pris d'assaut par les mails des élèves en début de collège !
Si on faisait toujours comme "on a toujours fait", on en serait encore à l'âge des cavernes.
je trouve plus simple, logique et rapide de mettre une colonne id_qcm avec les id des qcm dans une string : 22|143|1227|5812
C'est une lecture un peu rapide ... Cette organisation ne respecte pas la première forme normale (atomicité) et implique des difficultés pour mettre à jour les données et pour gérer l'intégrité référentielle si besoin ultérieurement de stocker les réponses des élèves ...
Si tu ne veux pas t'emmerder avec l'intégrité référentielle et les formes normales, le plus simple est de passer à NoSQL (MongoDB) qui sera bien plus simple pour "structurer" tes données ...
Zelione a écrit:
les élèves on directement une colonne id_classe
Dans mon modèle aussi
Zelione a écrit:
sur ton schéma, il y a triangle XT et je ne sais pas bien à quoi ca correspond
Comment, une fois un travail fini, aller chercher la note de l'élève dans une table OU une autre pour les devoirs maison ou les QCM
Tu n'avais pas parlé de note, cela rajouterai dans mon modèle une relation "note" entre eleve et devoir, avec par exemple deux attributs : date_restitution et valeur :
Côté SQL il faudra faire deux jointures externes sur maison et qcm et gérer avec COALESCE pour afficher l'un ou l'autre (puisque héritage XT c'est forcément l'un ou l'autre).
j'ai regardé du coté de COALESCE qui semble me convenir. donc plutot que de mettre un champ type et un chanp id_dans_le_type, je met donc id_exe et id_dm et j'affiche l'un ou l'autre.
En effet, j'avais omis les notes qui sont en réalité dans la table devoir ou plutot évaluation:
table EVAL : id_elev, note, id_exe, , id_dm et avec COALESCE, je prends une note soit d'un exe soit d'un dm. La table devoir n'a en réalité pas de raison d'etre puisque les nom des devoir sont soit le nom de l'exercice soit celui du dm.
BENZOUYE a écrit :
C'est une lecture un peu rapide ... Cette organisation ne respecte pas la première forme normale (atomicité) et implique des difficultés pour mettre à jour les données et pour gérer l'intégrité référentielle si besoin ultérieurement de stocker les réponses des élèves ...
Bon, je ne comprend pas ce que ça veut dire... Pour ma part, j'arrive à stocker les réponses des élèves sans problème et je me sert de ce modèle dans toute mon arborescence dans l'édition des cours. Une ligne a un champs "enfants" avec des données sous la forme |A#12|B#123|B#245|C#7| etc Séquence / séance / activité et dedans slide / images ou exercice/qcm Cela me permet aussi de définir un ordre sans rajouter de champ, ce qui est indispensable dans une arborescence.
Zelione a écrit:
Les élèves ont directement une colonne id_classe
BENZOUYE a écrit;
Dans mon modèle aussi
Alors je ne comprend pas le rond bleu avec "contient". Je croyais que c'était une table d'association...
Bon, je vais tester tout ça. Il est évident que tu maîtrises très bien le sujet et que je ne comprends pas tout. Mon code pourrait évidement être optimisé tant dans le php que kle mySQL ou dans le javascript ou l'ajax. Bref, mon site a déjà près de 200 fichiers et c'est loin d'être fini...
En tout cas, merci de ton aide. @+
Si on faisait toujours comme "on a toujours fait", on en serait encore à l'âge des cavernes.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Si on faisait toujours comme "on a toujours fait", on en serait encore à l'âge des cavernes.
Si on faisait toujours comme "on a toujours fait", on en serait encore à l'âge des cavernes.
Si on faisait toujours comme "on a toujours fait", on en serait encore à l'âge des cavernes.