Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Datenbankdesign für ein Multiplayer-/Einzelquizspiel

Tatsächlich besteht Ihr System aus drei logischen Teilen (Modulen):

  • Benutzermodul, das Benutzerdaten enthält und die Authentifizierung und Autorisierung von Benutzeraktionen implementiert
  • Fragebogenmodul, das die Verwaltung von Fragen und Antworten umfasst
  • Fragebogenverlaufsmodul, das den Verlauf jedes Benutzers enthält

Das Datenbankdesign dieser Module kann wie folgt aussehen

BENUTZERMODUL:

Rolle - enthält Benutzerrollen im System

  • id - eindeutiger Bezeichner der Rolle
  • name – der Rollenname, z. B. admin, worker usw.

Benutzer - enthält Benutzer und Informationen über Rollen, die ihnen zugewiesen wurden

  • id - eindeutige Kennung des Benutzers
  • Benutzername
  • Passwort
  • role_id - Kennung, die dem Benutzer die Rolle zugewiesen wurde

FRAGEBOGENMODUL:

Thema - enthält Fragethemen

  • id - eindeutiger Bezeichner des Themas
  • name - ein Name des Themas

Frage - enthält Fragen

  • id - eindeutige Kennung der Frage
  • topic_id - Themenkennung der Frage
  • Text - Inhalt der Frage
  • is_exam_question - Prüfungsfrage oder nicht
  • type - Art der Antworten (Boolean, Checkboxen oder etc.)
  • Schwierigkeit

Antwort - enthält alle Antworten auf Fragen

  • id - eindeutige Kennung der Antwort
  • question_id - Kennung der Frage, die die Antwort enthält
  • Text - Inhalt der Frage
  • is_correct - Flag, das bedeutet, dass die Antwort wahr oder falsch ist

Raum - enthält Informationen über Räume

  • id - eindeutige Kennung des Rums
  • name - Name des Rums
  • Kapazität - die maximale Anzahl von Arbeitern, die dem Raum beitreten können
  • Typ - Zimmertyp:Gruppe, Solo oder etc.
  • learing_type - Raumtyp:Prüfung, Übung oder etc.

user_in_room - enthält Informationen über Benutzer, die dem Raum beigetreten sind

  • user_id - Kennung des Benutzers, der dem Raum beigetreten ist
  • room_id - Kennung des Raums
  • Punktzahl - aktuelle Punktzahl des Benutzers im Raum

HISTORIEMODUL:

user_question_history - enthält Informationen zu Fragen, die vom Benutzer beantwortet wurden

  • user_id - Kennung des Benutzers
  • room_id - Kennung des Raums, in dem der Benutzer Fragen beantwortet hat
  • question_id - Identifikator der Frage, die vom Benutzer beantwortet wurde
  • Punktzahl - Benutzerpunktzahl nach Frage

user_answer_history - enthält Informationen über Antworten, die vom Benutzer gewählt wurden

  • user_id - Kennung des Benutzers
  • room_id - Kennung des Raums, in dem der Benutzer Fragen beantwortet hat
  • question_id - Identifikator der Frage, die vom Benutzer beantwortet wurde
  • answer_id - Identifikator der Antwort, die der Benutzer gewählt hat

Die Verwendung dieses Schemas gibt die Möglichkeit, verschiedene Berichte zu erstellen. Beispielsweise können Sie das Ergebnis aller Benutzer nach Raum anzeigen

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>

Oder Sie können Detailinformationen zu den Antworten des Benutzers anzeigen

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>