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

Databasedesign til et multiplayer/single quiz-spil

Faktisk har dit system tre logiske dele (moduler):

  • brugermodul, der indeholder brugerdata og implementerer godkendelse og godkendelse af brugerhandlinger
  • spørgeskemamodul, der inkluderer håndtering af spørgsmål og svar
  • spørgeskemahistorikmodul, der indeholder historik for hver bruger

Databasedesign af disse moduler kan se ud som følger

BRUGERMODUL:

rolle - indeholder brugerroller i systemet

  • id - entydig identifikator for rollen
  • navn - rollenavnet, f.eks. admin, arbejder osv.

bruger - indeholder brugere og oplysninger om roller, der blev tildelt dem

  • id - unikt id for brugeren
  • brugernavn
  • adgangskode
  • rolle_id - identifikator rollen blev tildelt til brugeren

SPØRGESKEMAER MODUL:

emne - indeholder spørgsmålstemaer

  • id - unik identifikator for temaet
  • navn - et navn på temaet

spørgsmål - indeholder spørgsmål

  • id - entydig identifikator for spørgsmålet
  • topic_id - emne-id for spørgsmålet
  • tekst - indholdet af spørgsmålet
  • is_exam_question - eksamensspørgsmål eller ej
  • type - type svar (boolesk, afkrydsningsfelter eller osv.)
  • besvær

svar - indeholder alle svar på spørgsmål

  • id - entydig identifikator for svaret
  • spørgsmåls-id - identifikator for spørgsmålet, der indeholder svaret
  • tekst - indholdet af spørgsmålet
  • er_korrekt - flag, der betyder, at svaret er sandt eller falsk

værelse - indeholder oplysninger om lokaler

  • id - unik id for rom
  • navn - navnet på rommen
  • kapacitet - det maksimale antal medarbejdere, der kan slutte sig til lokalet
  • type - værelsestype:gruppe, solo eller osv.
  • learing_type - lokaletype:eksamen, praksis eller osv.

bruger_i_værelse - indeholder oplysninger om brugere, der blev tilsluttet rummet

  • bruger_id - id for den bruger, der blev knyttet til rummet
  • room_id - id for rummet
  • score - nuværende score for brugeren i rummet

HISTORIEMODUL:

user_question_history - indeholder oplysninger om spørgsmål, som blev besvaret af brugeren

  • user_id - identifikator for brugeren
  • room_id - identifikator for det rum, hvor brugeren besvarede spørgsmål
  • spørgsmåls-id - identifikator for spørgsmålet, der blev besvaret af brugeren
  • score - brugerscore efter spørgsmålet

user_answer_history - indeholder oplysninger om svar, som er valgt af brugeren

  • user_id - identifikator for brugeren
  • room_id - identifikator for det rum, hvor brugeren besvarede spørgsmål
  • question_id - identifikator for spørgsmålet, som blev besvaret af brugeren
  • svar_id - identifikator for det svar, der blev valgt til brugeren

Brug af dette skema giver mulighed for at bygge forskellige rapporter. For eksempel kan du vise resultatet for alle brugere efter rum

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>

Eller du kan se detaljerede oplysninger om brugerens svar

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. søg i databasen baseret på den valgte værdi fra databasen

  2. MySQL-installation:FEJL:Kunne ikke bygge gem native-udvidelse

  3. Hvordan udfører man den samme aggregering på hver kolonne uden at angive kolonnerne?

  4. Er der en driver til mysql på nodejs, der understøtter lagrede procedurer?