W rzeczywistości twój system składa się z trzech logicznych części (modułów):
- moduł użytkowników, który zawiera dane użytkownika i implementuje uwierzytelnianie oraz autoryzację działań użytkowników
- moduł ankiet, który obejmuje zarządzanie pytaniami i odpowiedziami
- moduł historii kwestionariuszy, który zawiera historię każdego użytkownika
Projekt bazy danych tych modułów może wyglądać następująco
MODUŁ UŻYTKOWNIKA:
rola - zawiera role użytkowników w systemie
- id - unikalny identyfikator roli
- nazwa - nazwa roli, na przykład admin, pracownik itp.
użytkownik - zawiera użytkowników i informacje o przypisanych im rolach
- id - unikalny identyfikator użytkownika
- nazwa użytkownika
- hasło
- role_id - identyfikator roli przypisanej użytkownikowi
MODUŁ KWESTIONARIUSZ:
temat - zawiera tematy pytań
- id — unikalny identyfikator motywu
- nazwa - nazwa motywu
pytanie - zawiera pytania
- id — unikalny identyfikator pytania
- topic_id — identyfikator tematu pytania
- tekst - treść pytania
- is_exam_question — pytanie egzaminacyjne czy nie
- typ - typ odpowiedzi (boolean, checkboxy itp.)
- trudność
odpowiedź - zawiera wszystkie odpowiedzi na pytania
- id - unikalny identyfikator odpowiedzi
- question_id — identyfikator pytania zawierającego odpowiedź
- tekst - treść pytania
- is_correct — flaga oznaczająca, że odpowiedź jest prawdziwa lub fałszywa
pokój - zawiera informacje o pokojach
- id - unikalny identyfikator rumu
- nazwa - nazwa rumu
- pojemność - maksymalna liczba pracowników, którzy mogą dołączyć do pokoju
- typ - typ pokoju:grupowy, solo lub itp.
- learing_type - typ sali:egzamin, praktyka itp.
użytkownik_w_pokoju - zawiera informacje o użytkownikach, którzy dołączyli do pokoju
- user_id - identyfikator użytkownika, który dołączył do pokoju
- room_id — identyfikator pokoju
- score - aktualny wynik użytkownika w pokoju
MODUŁ HISTORII:
user_question_history - zawiera informacje o pytaniach, na które odpowiedział użytkownik
- user_id — identyfikator użytkownika
- room_id — identyfikator pokoju, w którym użytkownik odpowiadał na pytania
- question_id — identyfikator pytania, na które użytkownik odpowiedział
- score — ocena użytkownika według pytania
user_answer_history - zawiera informacje o odpowiedziach wybranych przez użytkownika
- user_id — identyfikator użytkownika
- room_id — identyfikator pokoju, w którym użytkownik odpowiadał na pytania
- question_id — identyfikator pytania, na które użytkownik odpowiedział
- answer_id - identyfikator odpowiedzi wybranej przez użytkownika
Zastosowanie tego schematu daje możliwość budowania różnych raportów. Na przykład możesz wyświetlić wyniki wszystkich użytkowników według pokoju
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>
Lub możesz zobaczyć szczegółowe informacje o odpowiedziach użytkownika
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>