Mysql
 sql >> Database >  >> RDS >> Mysql

Progettazione di database per un gioco a quiz multigiocatore/singolo

In effetti, il tuo sistema ha tre parti logiche (moduli):

  • modulo utenti che contiene i dati dell'utente e implementa l'autenticazione e l'autorizzazione delle azioni dell'utente
  • Modulo questionari che include la gestione di domande e risposte
  • Modulo di cronologia dei questionari che contiene la cronologia di ciascun utente

La progettazione del database di questi moduli può essere la seguente

MODULO UTENTE:

ruolo - contiene i ruoli utente nel sistema

  • id - identificatore univoco del ruolo
  • nome:il nome del ruolo, ad esempio amministratore, lavoratore, ecc.

utente - contiene utenti e informazioni sui ruoli loro assegnati

  • id - identificatore univoco dell'utente
  • nome utente
  • password
  • role_id - identificatore il ruolo è stato assegnato all'utente

MODULO QUESTIONARI:

argomento - contiene temi di domande

  • id - identificatore univoco del tema
  • nome - un nome del tema

domanda - contiene domande

  • id - identificatore univoco della domanda
  • topic_id - identificatore dell'argomento della domanda
  • testo - contenuto della domanda
  • is_exam_question - domanda dell'esame o meno
  • tipo - tipo di risposte (booleane, caselle di controllo o ecc.)
  • difficoltà

risposta - contiene tutte le risposte alle domande

  • id - identificatore univoco della risposta
  • id_domanda - identificatore della domanda che contiene la risposta
  • testo - contenuto della domanda
  • is_correct - flag che significa che la risposta è vera o falsa

stanza - contiene informazioni sulle stanze

  • id - identificatore univoco del rum
  • nome - nome del rum
  • capacità - il numero massimo di lavoratori che possono entrare nella stanza
  • tipo - tipo di camera:gruppo, singolo o ecc.
  • learning_type - tipo di stanza:esame, pratica o ecc.

utente_nella_stanza - contiene informazioni sugli utenti che si sono uniti alla stanza

  • id_utente - identificatore dell'utente che si è unito alla stanza
  • room_id - identificatore della stanza
  • punteggio - punteggio attuale dell'utente nella stanza

MODULO STORIA:

user_question_history - contiene informazioni sulle domande a cui l'utente ha risposto

  • id_utente - identificatore dell'utente
  • room_id - identificatore della stanza in cui l'utente ha risposto alle domande
  • id_domanda - identificatore della domanda a cui l'utente ha risposto
  • punteggio - punteggio dell'utente in base alla domanda

user_answer_history - contiene informazioni sulle risposte scelte dall'utente

  • id_utente - identificatore dell'utente
  • room_id - identificatore della stanza in cui l'utente ha risposto alle domande
  • id_domanda - identificatore della domanda a cui l'utente ha risposto
  • answer_id - identificatore della risposta scelta dall'utente

L'utilizzo di questo schema offre la possibilità di creare report diversi. Ad esempio, puoi visualizzare il risultato di tutti gli utenti per stanza

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>

Oppure puoi visualizzare informazioni dettagliate sulle risposte dell'utente

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>