Ve skutečnosti má váš systém tři logické části (moduly):
- uživatelský modul, který obsahuje uživatelská data a implementuje ověřování a autorizaci uživatelských akcí
- modul dotazníků, který zahrnuje správu otázek a odpovědí
- modul historie dotazníků, který obsahuje historii každého uživatele
Návrh databáze těchto modulů může vypadat následovně
UŽIVATELSKÝ MODUL:
role - obsahuje uživatelské role v systému
- id – jedinečný identifikátor role
- jméno – název role, například správce, pracovník atd.
uživatel - obsahuje uživatele a informace o rolích, které jim byly přiděleny
- id – jedinečný identifikátor uživatele
- uživatelské jméno
- heslo
- role_id – identifikátor, kterým byla role přiřazena uživateli
MODUL DOTAZNÍKŮ:
téma - obsahuje témata otázek
- id – jedinečný identifikátor motivu
- název – název motivu
otázka - obsahuje otázky
- id – jedinečný identifikátor otázky
- topic_id – identifikátor tématu otázky
- text – obsah otázky
- is_exam_question – otázka ke zkoušce nebo ne
- typ – typ odpovědí (logická hodnota, zaškrtávací políčka atd.)
- obtížnost
odpověď - obsahuje všechny odpovědi na otázky
- id – jedinečný identifikátor odpovědi
- question_id – identifikátor otázky, která obsahuje odpověď
- text – obsah otázky
- is_correct – příznak, který znamená, že odpověď je pravdivá nebo nepravdivá
místnost - obsahuje informace o místnostech
- id – jedinečný identifikátor rumu
- name – název rumu
- kapacita – maximální počet pracovníků, kteří se mohou připojit k místnosti
- type – typ pokoje:skupina, sólo nebo atd.
- learing_type – typ místnosti:zkouška, praxe nebo atd.
user_in_room - obsahuje informace o uživatelích, kteří byli připojeni k místnosti
- user_id – identifikátor uživatele, který byl připojen k místnosti
- id_pokoje – identifikátor místnosti
- skóre – aktuální skóre uživatele v místnosti
MODUL HISTORIE:
user_question_history - obsahuje informace o otázkách, na které uživatel odpověděl
- user_id – identifikátor uživatele
- room_id – identifikátor místnosti, kde uživatel odpovídal na otázky
- question_id – identifikátor otázky, na kterou uživatel odpověděl
- skóre – skóre uživatele podle otázky
user_answer_history - obsahuje informace o odpovědích, které si uživatel vybral
- user_id – identifikátor uživatele
- room_id – identifikátor místnosti, kde uživatel odpovídal na otázky
- question_id – identifikátor otázky, na kterou uživatel odpověděl
- answer_id – identifikátor odpovědi, která byla vybrána uživatelem
Použití tohoto schématu umožňuje vytvářet různé sestavy. Můžete například zobrazit výsledek všech uživatelů podle místnosti
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>
Nebo si můžete prohlédnout podrobné informace o odpovědích uživatele
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>