sql >> Database >  >> RDS >> Mysql

Database-ontwerp voor een spel met meerdere spelers/enkele quiz

In feite heeft uw systeem drie logische delen (modules):

  • gebruikersmodule die gebruikersgegevens bevat en authenticatie en autorisatie van gebruikersacties implementeert
  • vragenlijstenmodule met beheer van vragen en antwoorden
  • vragenlijsten geschiedenismodule die de geschiedenis van elke gebruiker bevat

Het databaseontwerp van die modules kan er als volgt uitzien

GEBRUIKERSMODULE:

rol - bevat gebruikersrollen in het systeem

  • id - unieke identificatie van de rol
  • naam - de rolnaam, bijvoorbeeld admin, worker, etc.

gebruiker - bevat gebruikers en informatie over rollen die aan hen zijn toegewezen

  • id - unieke identificatie van de gebruiker
  • gebruikersnaam
  • wachtwoord
  • role_id - identifier de rol is toegewezen aan de gebruiker

VRAGENLIJSTMODULE:

onderwerp - bevat vraagthema's

  • id - unieke identificatie van het thema
  • naam - een naam van het thema

vraag - bevat vragen

  • id - unieke identificatie van de vraag
  • topic_id - onderwerp-ID van de vraag
  • tekst - inhoud van de vraag
  • is_exam_question - examenvraag of niet
  • type - type antwoorden (boolean, selectievakjes of etc.)
  • moeilijkheid

antwoord - bevat alle antwoorden op vragen

  • id - unieke identificatie van het antwoord
  • question_id - identificatie van de vraag die het antwoord bevat
  • tekst - inhoud van de vraag
  • is_correct - markeer dat het antwoord waar of onwaar is

kamer - bevat informatie over kamers

  • id - unieke identificatie van de rum
  • naam - naam van de rum
  • capaciteit - het maximale aantal werknemers dat kan deelnemen aan de ruimte
  • type - kamertype:groep, solo of etc.
  • learing_type - kamertype:examen, praktijk of etc.

user_in_room - bevat informatie over gebruikers die zijn toegevoegd aan de kamer

  • user_id - identificatie van de gebruiker die aan de kamer was toegevoegd
  • room_id - identifier van de kamer
  • score - huidige score van de gebruiker in de kamer

GESCHIEDENISMODULE:

user_question_history - bevat informatie over vragen die door de gebruiker zijn beantwoord

  • user_id - identificatie van de gebruiker
  • room_id - identificatie van de ruimte waar de gebruiker vragen heeft beantwoord
  • question_id - identificatie van de vraag die door de gebruiker is beantwoord
  • score - gebruikersscore per vraag

user_answer_history - bevat informatie over antwoorden die door de gebruiker zijn gekozen

  • user_id - identificatie van de gebruiker
  • room_id - identificatie van de ruimte waar de gebruiker vragen heeft beantwoord
  • question_id - identificatie van de vraag die door de gebruiker is beantwoord
  • answer_id - identificatie van het antwoord dat door de gebruiker is gekozen

Het gebruik van dit schema geeft de mogelijkheid om verschillende rapporten te bouwen. U kunt bijvoorbeeld het resultaat van alle gebruikers per kamer weergeven

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>

Of u kunt gedetailleerde informatie over de antwoorden van de gebruiker bekijken

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>


  1. Hoe Mysql-variabelen te gebruiken met Hibernate?

  2. MySQL-verzameling voor Portugees

  3. Gegevensgeneratie en hardwarekwaliteit

  4. Laravel:Opgegeven sleutel was te lang; maximale sleutellengte is 767 bytes