Всъщност вашата система има три логически части (модули):
- модул за потребители, който съдържа потребителски данни и прилага удостоверяване и упълномощаване на действия на потребителя
- модул с въпросници, който включва управление на въпроси и отговори
- модул за история на въпросници, който съдържа история от всеки потребител
Дизайнът на базата данни на тези модули може да изглежда както следва
ПОТРЕБИТЕЛСКИЯ МОДУЛ:
роля - съдържа потребителски роли в системата
- id - уникален идентификатор на ролята
- име – името на ролята, например администратор, работник и т.н.
потребител - съдържа потребители и информация за ролите, които са им възложени
- id - уникален идентификатор на потребителя
- потребителско име
- парола
- role_id - идентификатор, на който ролята е била присвоена на потребителя
МОДУЛ ВЪПРОСНИЦИ:
тема - съдържа теми за въпроси
- id - уникален идентификатор на темата
- име - име на темата
въпрос - съдържа въпроси
- id – уникален идентификатор на въпроса
- topic_id - идентификатор на тема на въпроса
- текст - съдържание на въпроса
- is_exam_question - изпитен въпрос или не
- тип - тип на отговорите (булеви, квадратчета за отметка или др.)
- трудност
отговор - съдържа всички отговори на въпроси
- id - уникален идентификатор на отговора
- question_id – идентификатор на въпроса, който съдържа отговора
- текст - съдържание на въпроса
- is_correct – флаг, който означава, че отговорът е верен или неверен
стая - съдържа информация за стаи
- id - уникален идентификатор на рома
- име - име на рома
- капацитет – максималният брой работници, които могат да се присъединят към стаята
- тип - тип стая:групова, соло или др.
- learing_type - тип стая:изпит, практика или т.н.
потребител_в_стая - съдържа информация за потребители, които са били присъединени към стаята
- user_id – идентификатор на потребителя, който е бил присъединен към стаята
- room_id - идентификатор на стаята
- резултат – текущ резултат на потребителя в стаята
МОДУЛ ИСТОРИЯ:
user_question_history - съдържа информация за въпроси, на които е отговорил потребителят
- user_id - идентификатор на потребителя
- room_id - идентификатор на стаята, в която потребителят е отговорил на въпроси
- question_id - идентификатор на въпроса, на който е бил отговорен потребителят
- резултат – потребителска оценка по въпроса
user_answer_history - съдържа информация за избраните от потребителя отговори
- user_id - идентификатор на потребителя
- room_id - идентификатор на стаята, в която потребителят е отговорил на въпроси
- question_id - идентификатор на въпроса, на който е бил отговорен потребителят
- answer_id - идентификатор на отговора, който е избран от потребителя
Използването на тази схема дава възможност за изграждане на различни отчети. Например, можете да покажете резултата на всички потребители по стая
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>
Или можете да видите подробна информация за отговорите на потребителя
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>