Mysql
 sql >> Base de données >  >> RDS >> Mysql

Conception d'une base de données pour un jeu multijoueur/Single Quiz

En fait, votre système comporte trois parties logiques (modules) :

  • module des utilisateurs qui contient les données des utilisateurs et implémente l'authentification et l'autorisation des actions des utilisateurs
  • module de questionnaires qui inclut la gestion des questions et réponses
  • module d'historique des questionnaires contenant l'historique de chaque utilisateur

La conception de la base de données de ces modules peut ressembler à ceci

MODULE UTILISATEUR :

rôle - contient les rôles d'utilisateur dans le système

  • id - identifiant unique du rôle
  • name - le nom du rôle, par exemple, admin, worker, etc.

utilisateur - contient des utilisateurs et des informations sur les rôles qui leur ont été attribués

  • id - identifiant unique de l'utilisateur
  • nom d'utilisateur
  • mot de passe
  • role_id - identifiant auquel le rôle a été attribué à l'utilisateur

MODULE DE QUESTIONNAIRES :

sujet - contient des thèmes de questions

  • id - identifiant unique du thème
  • name - un nom du thème

question - contient des questions

  • id - identifiant unique de la question
  • topic_id - identifiant du sujet de la question
  • texte - contenu de la question
  • is_exam_question - question d'examen ou non
  • type - type de réponses (booléen, cases à cocher ou etc.)
  • difficulté

répondre - contient toutes les réponses aux questions

  • id - identifiant unique de la réponse
  • question_id - identifiant de la question qui contient la réponse
  • texte - contenu de la question
  • is_correct - drapeau qui signifie que la réponse est vraie ou fausse

chambre - contient des informations sur les chambres

  • id - identifiant unique du rhum
  • nom - nom du rhum
  • capacité - le nombre maximum de travailleurs pouvant rejoindre la salle
  • type - type de chambre :groupe, solo ou etc.
  • learing_type - type de salle :examen, pratique ou etc.

user_in_room - contient des informations sur les utilisateurs qui ont rejoint le salon

  • user_id - identifiant de l'utilisateur qui a rejoint la salle
  • room_id - identifiant de la salle
  • score - score actuel de l'utilisateur dans la salle

MODULE HISTORIQUE :

user_question_history - contient des informations sur les questions auxquelles l'utilisateur a répondu

  • user_id - identifiant de l'utilisateur
  • room_id - identifiant de la salle où l'utilisateur a répondu aux questions
  • question_id - identifiant de la question à laquelle l'utilisateur a répondu
  • score - score de l'utilisateur par question

user_answer_history - contient des informations sur les réponses choisies par l'utilisateur

  • user_id - identifiant de l'utilisateur
  • room_id - identifiant de la salle où l'utilisateur a répondu aux questions
  • question_id - identifiant de la question à laquelle l'utilisateur a répondu
  • answer_id - identifiant de la réponse choisie par l'utilisateur

L'utilisation de ce schéma permet de créer différents rapports. Par exemple, vous pouvez afficher le résultat de tous les utilisateurs par pièce

SELECT r.id,
    r.name,
    u.username,
    ur.score
FROM room as r
LEFT JOIN user_in_room as ur ON ur.room_id = r.id
LEFT JOIN user as u ON u.id = ur.user_id
WHERE r.id = <id>

Ou vous pouvez voir des informations détaillées sur les réponses de l'utilisateur

SELECT 
    q.text,
    a.text
FROM user_in_room as ur ON ur.room_id = r.id
LEFT JOIN user_question_history as uqh ON ugh.user_id = ur.user_id AND ugh.root_id = ur.room_id
LEFT JOIN question as q ON q.id = ugh.question_id
LEFT JOIN user_answer_history as uah ON uah.user_id = ugh.user_id AND uah.room_id = ugh.room_id AND uah.question_id = ugh.question_id
LEFT JOIN answer as a ON a.id = uah.answer_id
WHERE ur.room_id = <id> AND ur.user_id = <id>