sql >> Base de Datos >  >> RDS >> Mysql

Diseño de base de datos para un juego de preguntas individual/multijugador

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>