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>