Mostrando postagens com marcador Questionário. Mostrar todas as postagens
Mostrando postagens com marcador Questionário. Mostrar todas as postagens

segunda-feira, 9 de agosto de 2010

Desmistificando Questionário do Moodle com Comando SQL



    A Plataforma Moodle tem um excelente sistema de questionário . É um dos recursos mais rico do Moodle. Caso for necessário montar um relatório customizado, aí começa a dor de cabeça. Sobra pergunta e falta resposta. 
  •  Em qual tabela da base de dados fica armazenada os dados do questionário?
  •  Como consultar  esses dados com o  comando SQL?
    A resposta para essas perguntas é muito simples. Vamos lá. Primeiro vamos mapear a as principais tabelas. Em seguida, vamos demonstrar o comando SQL para consultar os dados.
As consultas fazem SELECT apenas em alguns campos que se julga mais importantes para compreensão da tabela. 

    Principais Tabelas do Questionário
  • mdl_question – Armazena as questões
  • mdl_question_answers - Armazena opções de resposta das questões e gabaritos
  • mdl_quiz – Armazena os questionários
  • mdl_quiz_grades - Armazena nota final do questionário de cada aluno
  • mdl_quiz_attempts – Armazena  a nota final de cada tentativas de resposta
  • mdl_question_states – Armazena as respostas dos alunos

    As tabelas não são apenas essas. Há muito mais. Entendendo essas, as demais será moleza. Bem, agora que você sabe onde fica o armazém de dados, deve estar mais tranqüilo. Vamos ao próximo passo que é a consulta com o comando SQL. Todos os  comando SQL foram testados na versão 1.9 e 1.9.7 do Moodle.

1- SQL para consultar questões
SELECT id,name,questiontext,qtype FROM mdl_question

Essa consulta retorna todas as questões cadastradas. Retorna uma lista com:
  • id - Id  da questão
  • name - Nome da questão
  • questiontext – Enunciado da questão
  •  qtype – Tipo da questão

2- SQL para consultar alternativas de respostas e gabarito de uma determinada  questão

SELECT id,answer,fraction FROM mdl_question_answers  WHERE question=?
 
Passe o parâmetro id da questão  em question=?

Essa consulta retorna todas as opções de respostas de uma determinada questão. Retorna uma lista com:
  • id - Id  da resposta
  • answer – Texto da resposta
  • fraction – Fica o gabarito  das respostas. Indica se a resposta é verdadeira ou falsa. 

3 - SQL para consultar questionário um determinado curso
SELECT id,name,questions,grade FROM mdl_quiz WHERE course=?

Passe o parâmetro id do curso em course=?

Essa consulta retorna uma lista de questionário vinculado a um determinado  curso.
 Retorna uma lista com:
  • id - Id  do questionário
  • name – Nome do questionário
  • questions –  Lista de Id das questões (que ficam na tabela mdl_question ) instanciadas no questionário.  A lista de Id é separada por virgula . Algo assim: 1,2,4,8…
  • grade  - Escala de nota maxima do questionário. Indica se questionário vale nota 10 por exemplo.
Observação:
    Se você estava procurando uma tabela com relação de muitos para  muitos que relacione a tabela do questionário com a tabela da questões, dançou. Perdeu tempo vasculhando. O campo  questions da  tabela mdl_quiz resolve esse vínculo apenas listando os id das questões. Está claro que, neste caso, não há integridade  de dados via chave primária e estrangeira. A integridade de dados fica na cama de aplicação do Moodle e não no motor da base de dados. Sendo assim, numa missão crítica, a eficiencia e performance do Moodle  pode ser questionada. Se houver falha na camda de aplicação, a gravação no banco pode ficar incompleta, assim pode gerar dados orfãos na base de dados. 


4 - SQL para consultar lista de nota dos alunos em um determinado  questionário


SELECT u.id,u.firstname,u.lastname,g.grade FROM mdl_user u INNER JOIN mdl_quiz_grades  g ON u.id=g.userid WHERE  quiz=?
Passe o parâmetro id do questionário em quiz=?
   
Essa consulta lista a nota final dos alunos numa atividade implementada com o questionário. Faz junção da tabela   mdl_user e mdl_quiz_grades. Há caso em que  o questionário pode ser configurada para o aluno fazer mais de uma tentativa,  valendo  como  nota final a da maior nota.  Essa consulta traz sempre a final da nota configurada no questionário.
A lista retorna:
  • id - Id  usuário
  • u.firstname – Nome do usuário
  • u.lastname – Sobrenome do usuário
  • g.grade – Nota final

5 - SQL para consultar as tentativas de  resposta do  questionário feitas por um determinado aluno

SELECT id,attempt, sumgrades FROM mdl_quiz_attempts WHERE quiz=? AND userid=?

Passe o parâmetro id do questionário em quiz=? e id do usuário em userid=?
    Essa consulta lista todas as tentativas feita em um questionário por um aluno. Caso o questionário for configurado para ter mais de uma tentativa de resposta, o aluno pode responder várias vezes. Todas as tentativas ficam armazenadas na tabela  mdl_quiz_attempts.

A lista retorna:
  • id - Id  da tentativa
  • attempt – Numéro seqüencial das tentativas feitas
  • sumgrades – Nota final da tentativa

6 - SQL para consultar resposta do questionário de um determinado aluno
SELECT q.name,s.seq_number,s.answer,s.grade FROM mdl_quiz_attempts t INNER JOIN mdl_question_states s ON   t.id=s.attempt INNER JOIN mdl_question q ON s.question=q.id WHERE  t.quiz=? AND t.userid=? AND t.attempt=?

Passe o parâmetro id do questionário em quiz=?,  id do usuário em userid=?  e id da tentativa em t.attempt=?
 
    Essa consulta extrai uma lista de todas as questões do questionário com as respostas do  aluno.  Caso uma questão sofrer  alteração durante o momento do preenchimento do questionário, será listado mais de uma vez, ou seja, a lista traz o histórico das alterações.  

A lista retorna:
  • q.name – Nome da questão
  • s.seq_number – Controle  do histórico da alteração
  • s.answer – Resposta atribuída
  • s.grade – Nota obtida

O campo s.seq_number indica quantas vezes a questão sofreu alteração. A última alteração que é válida para computar a nota final da tentativa.

7 - SQL para consultar histórico de resposta  de uma determinada questão de um aluno

SELECT  s.seq_number,s.answer,s.grade FROM mdl_quiz_attempts t INNER JOIN mdl_question_states s ON   t.id=s.attempt  WHERE t.quiz=? AND t.userid=? AND t.attempt=? AND s.question=?

Passe o parâmetro id do questionário em quiz=?,  id do usuário em userid=?,   id da tentativa em t.attempt=? e id da questão em s.question=?


    Essa consulta retorna o histórico de resposta de uma questão dado por um aluno. É uma consulta detalhada exclusivamente de uma questão. Cada alteração na questão é registrada no banco de dados.

A lista retorna:
  • s.seq_number – Controle  do histórico da alteração
  • s.answer – Resposta atribuída
  • s.grade – Nota obtida

    Bem, com essas informações  já é possível decifrar o restante das tabelas sobre o questionário que  não foram abordados aqui.  Entendendo a lógica de funcionamento e ligação entre  as tabelas aqui apresentado,  já possibilita montar um relatório customizado sobre o Moodle.    
    Agora que já desvendou o mistério, faça um intervalo, vá tomar uma cerveja. Ao voltar da manguaça, boa programação.