sql >> Databasteknik >  >> RDS >> Mysql

Databasdesign för ett multiplayer/single quiz-spel

Faktum är att ditt system har tre logiska delar (moduler):

  • användarmodul som innehåller användardata och implementerar autentisering och auktorisering av användaråtgärder
  • enkätmodul som inkluderar hantering av frågor och svar
  • enkäthistorikmodul som innehåller historik av varje användare

Databasdesignen för dessa moduler kan se ut som följer

ANVÄNDARMODUL:

roll - innehåller användarroller i systemet

  • id - unik identifierare för rollen
  • namn – rollnamnet, till exempel administratör, arbetare, etc.

användare - innehåller användare och information om roller som tilldelats dem

  • id - unik identifierare för användaren
  • användarnamn
  • lösenord
  • role_id - identifierare rollen tilldelades användaren

FRÅGEFORMULÄR:

ämne - innehåller frågeteman

  • id - unik identifierare för temat
  • namn – ett namn på temat

fråga - innehåller frågor

  • id - unik identifierare för frågan
  • topic_id - ämnesidentifierare för frågan
  • text – frågans innehåll
  • is_exam_question - provfråga eller inte
  • typ - typ av svar (booleska, kryssrutor eller etc.)
  • svårighet

svar - innehåller alla svar på frågor

  • id - unik identifierare för svaret
  • fråga_id - identifierare för frågan som innehåller svaret
  • text – frågans innehåll
  • är_korrekt – flagga som betyder att svaret är sant eller falskt

rum - innehåller information om rum

  • id - unik identifierare för rom
  • namn – rommens namn
  • kapacitet - det maximala antalet arbetare som kan ansluta sig till rummet
  • typ - rumstyp:grupp, solo eller etc.
  • learing_type - rumstyp:tentamen, övning eller etc.

användare_i_rummet - innehåller information om användare som anslutits till rummet

  • user_id - identifierare för användaren som anslutits till rummet
  • room_id - identifierare för rummet
  • poäng – nuvarande poäng för användaren i rummet

HISTORIKMODUL:

user_question_history - innehåller information om frågor som besvarades av användaren

  • user_id - identifierare för användaren
  • room_id - identifierare för rummet där användaren svarade på frågor
  • question_id - identifierare för frågan som besvarades av användaren
  • poäng – användarpoäng efter frågan

user_answer_history - innehåller information om svar som valts av användaren

  • user_id - identifierare för användaren
  • room_id - identifierare för rummet där användaren svarade på frågor
  • question_id - identifierare för frågan som besvarades av användaren
  • answer_id - identifierare för svaret som valdes av användaren

Användning av detta schema ger möjlighet att bygga olika rapporter. Du kan till exempel visa resultatet för alla användare per 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 så kan du se detaljerad information om användarens 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. iptables:Duplicera/vidarebefordra portar

  2. OM... ANNAT i WHERE-satsen MySQL

  3. MySQL BYTA IN TILL på flera nycklar?

  4. Importera .sql-fil på Windows till postgresql