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>