Je réexplique le sujet que j'ai eu ailleurs sur le Forum : Je vais coder un système de quiz pour un site d'éducation. Côté Admin, je dois pouvoir créer un Quiz, l'attribuer à une catégorie, y ajouter des questions, pour chaque question, je peux ajouter des réponses, dont une sera juste. Côté utilisateur final (apprenant), il pourra répondre au quiz, chaque bonne réponse lui rapportera des points.

J'essaye de penser l'organisation la plus logique et surtout la plus légère pour que ce ne soit pas trop gourmand en ressource serveur et BDD.

Voici une idée d'organisation, et vous remarques, critiques, autres idées d'amélioration sont les bienvenues :) :

  • Une table Quiz (id, name, module_id) (le champ "module_id" fait référence au chapitre auquel appartient le quiz)
  • Une table Question (id, quiz_id, question, point)
  • Une table Answer (id, question_id, is_right) (le champ "is_right" est là pour déterminer quelle est la bonne réponse à la quesion)

Niveau relation je vois :

  • Quiz hasMany Question
  • Question hasMany Answer
  • Quiz belongsToCategory
  • Question belongsTo Quiz
  • Answer BelongsTo Question

Pour lier à l'utilisateur :

  • une table quizuser (id, quiz_id, user_id, category_id, points)
    (le champs "points" attribuant les points gagné par l'utilisateur sur un quiz)
    Pour les relations :
  • QuizUser belongsTo = array('Quiz', 'User', 'Category');
  • Quiz hasMany QuizUser
  • User hasMany QuizUser

Voilà une 1ère réflexion, si vous avez des remarques, d'autres pistes ou des solutions concrètes qui fonctionnent bien, je suis preneur :)

2 réponses


amethyste
Réponse acceptée

C'est parfait. Juste QuizUser belongsTo Category ? A moins que tes utilisateurs soient aussi catégorisés, tu as déjà la categorie du quizz dans tes relations.

Merci de ta réponse et ta remarque Amethyste. Une erreur de de ma part. Pour une fois que je ne me trompe pas trop dans les relations :)
Bon, reste à mettre tout ça en place, une autre histoire :)

Sinon à votre avis, question "pratiques", que vaut-il mieux question sécurité "anti-triche) ? (Le but étant ici de "certifier" des apprenants selon leurs résultats)

  • Envoyer les données au serveur à chaque réponse de l'user
  • Ou envoyer les données de tout le quiz à la fin, quand l'user a terminé suffit.