Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Design de banco de dados para um jogo Multiplayer/Single Quiz


Na verdade, seu sistema tem três partes lógicas (módulos):
  • módulo de usuários que contém dados do usuário e implementa autenticação e autorização de ações do usuário
  • módulo de questionários que inclui gerenciamento de perguntas e respostas
  • módulo de histórico de questionários que contém o histórico de cada usuário

O design do banco de dados desses módulos pode ter a seguinte aparência

MÓDULO DE USUÁRIO:

função - contém funções de usuário no sistema
  • id - identificador exclusivo da função
  • nome - o nome da função, por exemplo, administrador, funcionário etc.

usuário - contém usuários e informações sobre funções foram atribuídas a eles
  • id - identificador exclusivo do usuário
  • nome de usuário
  • senha
  • role_id - identificador que a função foi atribuída ao usuário

MÓDULO DE QUESTIONÁRIOS:

tópico - contém temas de perguntas
  • id - identificador exclusivo do tema
  • nome - um nome do tema

pergunta - contém perguntas
  • id - identificador exclusivo da pergunta
  • topic_id - identificador do tópico da pergunta
  • texto - conteúdo da pergunta
  • is_exam_question - pergunta do exame ou não
  • tipo - tipo de respostas (booleano, caixas de seleção ou etc.)
  • dificuldade

resposta - contém todas as respostas das perguntas
  • id - identificador exclusivo da resposta
  • question_id - identificador da pergunta que contém a resposta
  • texto - conteúdo da pergunta
  • is_correct - sinalizador que significa que a resposta é verdadeira ou falsa

sala - contém informações sobre quartos
  • id - identificador exclusivo do rum
  • nome - nome do rum
  • capacidade - o número máximo de trabalhadores que podem entrar na sala
  • tipo - tipo de quarto:grupo, individual ou etc.
  • learing_type - tipo de sala:exame, prática ou etc.

user_in_room - contém informações sobre usuários que ingressaram na sala
  • user_id - identificador do usuário que entrou na sala
  • room_id - identificador da sala
  • pontuação - pontuação atual do usuário na sala

MÓDULO DE HISTÓRICO:

user_question_history - contém informações sobre perguntas que foram respondidas pelo usuário
  • user_id - identificador do usuário
  • room_id - identificador da sala onde o usuário respondeu às perguntas
  • question_id - identificador da pergunta que foi respondida pelo usuário
  • pontuação - pontuação do usuário pela pergunta

user_answer_history - contém informações sobre as respostas que foram escolhidas pelo usuário
  • user_id - identificador do usuário
  • room_id - identificador da sala onde o usuário respondeu às perguntas
  • question_id - identificador da pergunta que foi respondida pelo usuário
  • answer_id - identificador da resposta que foi escolhida pelo usuário

O uso desse esquema oferece a capacidade de criar relatórios diferentes. Por exemplo, você pode exibir o resultado de todos os usuários 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>

Ou você pode ver informações detalhadas sobre as respostas do usuário
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>