De hecho, su sistema tiene tres partes lógicas (módulos):
- módulo de usuarios que contiene datos de usuario e implementa la autenticación y la autorización de acciones de usuario
- módulo de cuestionarios que incluye gestión de preguntas y respuestas
- módulo de historial de cuestionarios que contiene el historial de cada usuario
El diseño de la base de datos de esos módulos puede verse de la siguiente manera
MÓDULO DE USUARIO:
rol - contiene roles de usuario en el sistema
- id - identificador único del rol
- nombre:el nombre del rol, por ejemplo, administrador, trabajador, etc.
usuario - contiene usuarios e información sobre los roles que se les asignaron
- id - identificador único del usuario
- nombre de usuario
- contraseña
- role_id - identificador que se asignó el rol al usuario
MÓDULO DE CUESTIONARIOS:
tema - contiene temas de preguntas
- id - identificador único del tema
- nombre - un nombre del tema
pregunta - contiene preguntas
- id - identificador único de la pregunta
- topic_id - identificador de tema de la pregunta
- texto - contenido de la pregunta
- is_exam_question - pregunta de examen o no
- tipo:tipo de respuestas (booleano, casillas de verificación, etc.)
- dificultad
respuesta - contiene todas las respuestas de las preguntas
- id - identificador único de la respuesta
- question_id - identificador de la pregunta que contiene la respuesta
- texto - contenido de la pregunta
- is_correct - bandera que significa que la respuesta es verdadera o falsa
habitación - contiene información sobre las habitaciones
- id - identificador único del ron
- nombre - nombre del ron
- capacidad:el número máximo de trabajadores que pueden unirse a la sala
- tipo - tipo de habitación:grupo, solo o etc.
- learning_type - tipo de sala:examen, práctica, etc.
usuario_en_la_sala - contiene información sobre los usuarios que se unieron a la sala
- user_id:identificador del usuario que se unió a la sala
- room_id - identificador de la habitación
- puntuación - puntuación actual del usuario en la sala
MÓDULO DE HISTORIA:
historial_de_preguntas_de_usuario - contiene información sobre las preguntas que fueron respondidas por el usuario
- user_id - identificador del usuario
- room_id:identificador de la sala donde el usuario respondió las preguntas
- question_id - identificador de la pregunta que fue respondida por el usuario
- puntuación:puntuación del usuario por pregunta
historial_de_respuestas_del_usuario - contiene información sobre las respuestas que fueron elegidas por el usuario
- user_id - identificador del usuario
- room_id:identificador de la sala donde el usuario respondió las preguntas
- question_id - identificador de la pregunta que fue respondida por el usuario
- answer_id - identificador de la respuesta que eligió el usuario
El uso de este esquema brinda la posibilidad de crear diferentes informes. Por ejemplo, puede mostrar el resultado de todos los usuarios por sala
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>
O puede ver información detallada sobre las respuestas del usuario
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>