quinta-feira, 9 de setembro de 2010

Padronização das tabelas do Banco de Dados do Moodle


    A Plataforma Moodle é um sistema modular, ou seja, é um ambiente de gerenciamento de vários módulos voltado para gerenciamento de cursos.  A estrutura da base de dados reflete muito bem isso.

Padrão de Nome das  Tabelas

    As tabelas no banco de dados são compostas pelo prefixo e nome do módulo. mdl_ é o prefixo padrão. Isso pode ser alterado no momento de instalação.  Por exemplo, a tabela do módulo fórum é mdl_forum. Sendo mdl_ é o prefixo e forum é o nome do módulo. Todos os módulos seguem esse padrão.

Módulos que não são do Núcleo do Sistema
Os módulos que não compões o núcleo do sistema  ficam registradas na tabela mdl_modules. Para visualizar esses módulos,  basta fazer uma consulta na  tabela mdl_modules, usando o seguinte comando SQL:

SELECT id,name FROM mdl_modules
Resultado da pesquisa:
Id    name
1      assignment
2      chat
3      choice
4      data
5      forum
6      glossary
7      hotpot
8      journal
9      label
10      lams
11      lesson
12      quiz
13      resource
14      scorm
15      survey
16      wiki
17      workshop  

    Essa consulta foi feita nas versões 1.9.3 e 1.9.7 do Moodle. Isso já é padrão da versão 1.9+ A consulta lista os módulos que vêm na distribuição padrão do Moodle. A consulta traz os campos id (chave de identificação) e name (nome do módulo).

Tabela Principal e Secundária do Módulo
    A tabela principal de cada modulo é  prefixo + nome do módulo. Em cada módulo há outras tabelas, ou seja, tabelas secundárias. Por exemplo, a tabela principal do fórum é mdl_forum (prefixo + nome do módulo). O fórum é  composta por tópicos de discussões de comentários. Pois, as tabelas secundárias são:
  • mdl_forum_discussions – Tabela dos tópicos de discussão do fórum
  • mdl_forum_posts    - Tabela de comentários do fórum
  • mdl_forum_ratings    - Tabela de nota do fórum
    Nas tabelas secundárias dá para notar que o padrão do nome é prefixo + nome do módulo + funcionalidade do módulo.
    Embora tomamos como exemplo a tabela do fórum, esse padrão se aplica a todos os módulos.

Colunas Padrão nas Principais  Tabelas que não são do Núcleo do Sistema
    Até agora deu para entender a estrutura das tabelas dos módulos. Em cada tabela do módulo que não seja do núcleo do sistema, por padrão, deve as seguintes colunas:
  • id – Chave de identificação de cada registro da instância do módulo.
  • name – Nome  do registro da instância do módulo.
  • course – Id do curso  em que o módulo está vinculado. É a chave estrangeira da tabela mdl_course. Isso significa que cada registro da instancia de um módulo deve estar obrigatoriamente vinculado a um determinado curso.
Com esse padrão, torna possível montar uma rotina que faz leitura automática de todos os módulos. Para tornar isso mais claro, vamos ver um exemplo.
O comando SQL  abaixo faz uma consulta dos campos padrões do módulo fórum.

SELECT id, name, course FROM mdl_forum
Resultado da pesquisa:
id    name        course
1    Fórum Teste I     2
2    Fórum Teste II    2
3    Dúvidas Gerais    3
    A consulta retorna três registros de fórum. A coluna course indica que os fóruns registrados pertencem aos cursos cujo id são 2 e 3. A  mesma pesquisa pode ser aplicada a qualquer módulo, basta substituir a parte do nome da tabela após o prefixo pelo nome do outro módulo. Para pesquisar no módulo do questionário, o comando SQL seria:

SELECT id, name, course FROM mdl_quiz
    Isso não se aplica aos módulos que compões ao núcleo  do sistema tais como usuário, curso, log etc.

Tabelas dos módulos do sistema

mdl_user – Tabela principal do módulo do usuário
mdl_course  - Tabela principal do módulo do curso
mdl_log - Tabela principal do módulo de log
etc.
 
    Bem, você já deve ter sacado como é o padrão e a estrutura das tabelas do Moodle. Caso queira  explorar mais afundo isso, clique aqui, e acesse um arquivo com dump, ou seja, um backup da estrutura de todas as tabelas do Moodle 1.9.3 e com dados reais sobre curso. Estudar banco de dados não é uma tarefa muito mole, por isso lhe desejo boa sorte e muita paciência.

8 comentários:

  1. muinto legal mesmo eu consegui fazer isso tudo ai

    ResponderExcluir
  2. Gostei da explicação, bem clara e objetiva. Gostaria de saber se há como fazer um select da quantidade de vezes que determinado aluno entrou num questionário ou forum ?

    ResponderExcluir
  3. Michael,
    Veja como consultar o tatal de acesso numa atividade no fórum da comunidade Badiu: http://comunidade.badiu.com.br/mod/forum/discuss.php?d=136

    ResponderExcluir
  4. Muito legal Badiu!
    Queria aproveitar e perguntar sobre uma dúvida que tenho...no cadastro do perfil do usuário tem o campo cidade. Alguém já pensou em utilizar uma base pronta com a relação de cidades brasileiras, por exemplo, para que o usuário faça uma seleção dentre as opções que já existem? Pergunto pois quando da necessidade de emissão de relatórios cada usuário cadastra a cidade de uma forma. Pensei que pudesse ser um meio de padronizar e facilitar a vida. rsrs obrigada! Abraços

    ResponderExcluir
    Respostas
    1. Aqui no meu trabalho é feito assim.... é ruim pro programador interpretar as vezes mas é bom nesse sentido sim

      Excluir
  5. Estou encontrando um erro quando um professor, nem todos, tenta lançar notas dos alunos exibe o erro: subquery retornou mais de uma linha.
    Alguém pode me ajudar?

    ResponderExcluir