Se você administrasse uma plataforma de aprendizado online MOOC como edX ou Coursera, como você a manteria organizada? Neste artigo, veremos um modelo de banco de dados que faria o trabalho.
Você provavelmente já ouviu falar do MOOC (Massive Open Online Course), uma maneira de aprender online. E se você não tiver, pense em um programa MOOC como disciplinas universitárias com todos os materiais, testes e comentários disponíveis online. Dois dos provedores de MOOC online mais populares são Coursera (fundado pela Stanford University) e edX (fundado pelo Massachusetts Institute of Technology e Harvard University). Em colaboração com outras universidades e parceiros, eles oferecem centenas de cursos para milhões de alunos em todo o mundo.
Neste artigo, discutiremos uma versão simplificada de um modelo de banco de dados que poderíamos usar para executar esse tipo de serviço. Primeiro, vamos falar sobre como os MOOCs realmente funcionam de uma perspectiva não técnica.
Como funcionam as plataformas MOOC?
Pessoalmente, eu usei o Coursera e fiquei muito satisfeito com ele. Portanto, meus comentários neste artigo dizem respeito principalmente ao modelo do Coursera, embora eu acredite que o edX siga um padrão semelhante.
Qual é o modelo de negócios?
A ideia é muito simples. Parceiros – principalmente universidades – criam materiais para cursos online, que geralmente são baseados em suas ofertas de campus. Esses materiais podem incluir palestras em vídeo, leituras, questionários, discussões, projetos, testes on-line e, às vezes, tarefas finais. Grande parte do material é baseado em vídeo, para que os alunos tenham aquele “toque humano”. Gostei de alguns cursos não só pelo que foi ensinado, mas também pelos professores.
Os alunos precisam assistir ou ler os materiais fornecidos, concluir tarefas, responder a questionários e fazer testes. Normalmente, há também uma ou mais tarefas do projeto, e as notas de todas essas tarefas compõem a nota final. Se a nota final for superior a uma certa pontuação (por exemplo, 70%), os alunos passam no curso e recebem um certificado. Alguns certificados são gratuitos; outros exigem um pagamento relativamente pequeno. O mesmo vale para os cursos.
Cursos relacionados podem ser organizados em entidades maiores conhecidas como especializações. A conclusão da especialização dá ao aluno outro certificado (bem como um conjunto de habilidades mais completo) e pode ser mais barato do que concluir cada curso separadamente.
Todos os cursos e especializações podem ter sessões diferentes. Alguns terão novas sessões a cada mês, enquanto outros terão uma nova sessão a cada ano. Há também cursos que estão disponíveis sob demanda.
As certificações online ainda não têm o mesmo peso de um certificado universitário, mas aspiram a isso. Alguns cursos já estão aprovados para crédito universitário, e os programas de estudo online também são uma realidade agora.
Quantos parceiros, cursos e alunos existem?
A resposta simples é “muito”. Os cursos são medidos em milhares, parceiros em centenas e alunos em milhões – de quase todos os países do mundo.
Que mudanças podemos esperar para os MOOCs?
O melhor dos MOOCs é que eles podem se adaptar rapidamente às mudanças. Eles não são limitados por regulamentos estaduais ou universitários e não precisam esperar pela aprovação. Isso é muito importante, principalmente para cursos relacionados a TI. Alguns cursos e especializações não terão novas sessões:outros novos cursos aparecerão e os cursos existentes passarão por várias atualizações.
O modelo de banco de dados MOOC
Eu dividi o modelo de dados MOOC em três áreas de assunto:
Course details
Specialization details
Student participation
E há três tabelas independentes:
institution
lecturer
student
As tabelas independentes são usadas como fontes de dados para várias tabelas nas áreas de assunto. Como as áreas de assunto contêm a maior parte da lógica, vou explicá-las primeiro e depois passar para as tabelas independentes.
Cursos e Materiais
Embora as pessoas geralmente sejam a parte mais importante de qualquer transação, vou abrir uma exceção aqui. Sem os materiais do curso, não haveria cursos e, portanto, não haveria interesse em nossa plataforma MOOC. Em “Detalhes do curso”, agrupei todas as tabelas que descrevem cursos, instituições relacionadas, parceiros e materiais.
A tabela mais importante nesta seção é o course
tabela. Os atributos são:
name
– um nome de curso exclusivocommitment
– uma descrição textual do compromisso provável, por ex. “5 semanas de estudo, 5-7 horas/semana”description
– uma descrição do cursospecialization_id
– uma referência à especialização relacionada, se for o caso. Os cursos podem fazer parte de apenas uma especialização. Alguns cursos não são afiliados a nenhuma especialização, portanto, esse atributo não é obrigatório.min_grade
– a nota mínima necessária para passar em um curso. Normalmente, isso será medido como uma porcentagem. Na maioria dos cursos do Coursera, isso é 70%.course_price
– a taxa que você pagará por um curso.active
– um botão liga/desliga que indica se um curso terá sessões futuras. Os cursos ativos terão novas sessões, enquanto os inativos não.
Observe que o
course
tabela é denominada course:Course details
. Isso porque usei o course
tabela novamente em outro lugar para tornar o modelo mais claro. Para isso, usei as opções “Copiar” e “Colar como atalho” do Vertabelo. Cada curso é composto por alguns capítulos. No Coursera, os alunos geralmente têm uma semana para concluir cada capítulo. Uma lista de todas as subseções ou capítulos do curso é armazenada no
chapter
tabela. O course_id
atributo é uma referência ao course
tabela; chapter_no
é o número ordinal de um capítulo nesse curso. Esses dois atributos juntos formam a chave alternativa da tabela. O último atributo, description
, armazena uma descrição detalhada para cada capítulo. Cada capítulo é composto de palestras em vídeo, leituras, questionários, testes e projetos. Não criaremos estruturas separadas no banco de dados para armazenar diferentes tipos de materiais. Em vez disso, armazenaremos links para esses materiais. E é aí que o
material
table entra. Os atributos nesta tabela são:chapter_id
– uma referência ao capítulo relacionadomaterial_no
– um número ordinal atribuído a vários materiais do capítulo. Junto com ochapter_id
atributo, este atributo forma a chave alternativa (única) da tabela.material_type_id
– é uma referência aomaterial_type
tabelamandatory
– um valor booleano que indica se o material é obrigatório ou opcional (ou seja, para crédito extra)max_points
– o número máximo de pontos que o aluno pode alcançar após concluir este material. Se nenhum ponto for concedido, usaremos simplesmente "0" como valor.
O
material_type
table é um dicionário de todos os tipos de materiais possíveis. O único atributo ao lado da chave primária é type_name
e é claro que deve conter apenas valores únicos. Alguns tipos de materiais esperados são "aula em vídeo" , “leitura” , “questionário” , “teste” , “exame final” e “atribuição do projeto” . O
on_course
A tabela relaciona cada curso com o(s) professor(es) que ministra(m) aquele curso. Ele contém apenas sua chave primária e um par de chaves estrangeiras (lecturer_id
e course_id
). O par de chaves estrangeiras forma a chave exclusiva da tabela. Da mesma forma,
course_created_by
relaciona um curso com todas as instituições que estiveram envolvidas na sua criação. Especializações
Cursos autônomos são ótimos, mas para dominar uma nova habilidade, você precisará de mais de um curso. As especializações são um passo nessa direção. Eles são uma série de cursos, geralmente quatro ou cinco, e um projeto final onde você pode aplicar as habilidades que aprendeu. Todas as tabelas relacionadas à especialização estão em Specialization details
área.
A specialization
table é a tabela central desta seção. Para cada especialização, armazenaremos um name
exclusivo e description
. O specialization_discount
é o valor que um aluno economizará se se matricular em toda a especialização em vez de nos cursos independentes individualmente. Como antes, o active
O atributo é uma chave liga/desliga simples que indica se a especialização terá sessões futuras ou não.
Observe que a specialization
tabela também aparece duas vezes em nosso modelo. Dentro dessa área, ela se chama specialization:Specialization details
.
A on_specialization
e specialization_created_by
as tabelas têm a mesma finalidade e seguem a mesma lógica do on_course
e course_created_by
mesas. Claro, desta vez eles vão lidar com especializações em vez de cursos.
Alunos
E finalmente chegamos à seção de alunos. Na seção Student participation
área, armazenaremos registros de alunos, sessões e desempenho dos alunos.
Cada curso e especialização pode ter mais de uma sessão, portanto, precisaremos armazenar quando cada curso e especialização começa e quando termina. Para cursos, é muito simples. Cada nova sessão é apenas uma nova instância do mesmo curso. Uma nova sessão de especialização é uma nova instância de toda a especialização e de todos os seus cursos.
Lembre-se que os alunos podem se matricular em um curso de especialização ou em todos eles. As course_sessions
e specialization_session
tabelas nos fornecem essa informação. Além das datas, eles contêm apenas chaves estrangeiras para o course
e specialization_table
mesas. Uma data de início de chave estrangeira pair forma a chave exclusiva em ambas as tabelas.
As sessões do curso também podem fazer parte das sessões de especialização, portanto, precisaremos adicionar uma chave estrangeira (não obrigatória).
O status
dicionário lista todos os status possíveis relacionados ao desempenho do aluno durante um curso. Alguns status possíveis são "descartados" , “aprovado” e "falhou" .
Usaremos o enrolled_course
table para armazenar todas as matrículas em qualquer sessão do curso. Esta tabela contém duas chaves estrangeiras, student_id
e course_session_id
, e juntos eles formam a chave alternativa (única) para a tabela. Outros atributos na tabela são:
enrollment_date
– a data em que um aluno se matriculou nesse cursostatus_id
– uma referência aostatus
dicionário; isso registra o desempenho de um aluno nesse cursostatus_date
– a data em que um status foi atribuídofinal_grade
– a nota (em porcentagem) que o aluno obteve para aquele cursocertificate_ID
– um número de identificação do certificado que a plataforma gera quando o aluno é aprovado no cursocertificate_location
– um link para o local exato onde o certificado está armazenado
A enrolled_specialization
tabela segue a mesma lógica do enrolled_course
tabela. A diferença é que relaciona os alunos com especializações e não com cursos.
Usaremos os student_results
tabela para armazenar o desempenho dos alunos em materiais específicos do curso. Para cada material (material_id
) e a matrícula de cada aluno (enrolled_course_id
) poderíamos ter mais de uma tentativa. Portanto, a attempt
atributo é o número ordinal da tentativa de cada aluno. Esses três atributos juntos formam a chave alternativa da tabela.
Nesta tabela, o attempt_link
é a localização de cada instância de testes ou projetos apresentados pelos alunos. Podemos supor que para cada tentativa geraremos um “novo” teste com perguntas escolhidas aleatoriamente. Se o material não exigir respostas dos alunos, o link não existirá e armazenaremos um valor NULL aqui.
Por fim, os student_results
table armazena quando um aluno started
e ended
uma tentativa e a score
alcançou. Ele também pode armazenar resultados de desempenho em tarefas não avaliadas, além de registrar quais vídeos eles assistiram e quando, quais materiais eles leram etc.
Instituições
A institution
table é um catálogo simples que lista todas as instituições que criaram cursos ou cujos professores estão envolvidos em cursos.
Palestrantes
Poderíamos ir com uma tabela muito mais detalhada aqui, mas armazenar o nome e sobrenome de cada professor, título e nome da universidade é suficiente para nossos propósitos. Não surpreendentemente, tudo isso é mantido no lecturer
tabela.
Alunos
Vou terminar a visão geral da tabela com o student
tabela. Mais uma vez, precisamos apenas de atributos básicos aqui, e eles devem ser autoexplicativos.
Como podemos melhorar esse modelo?
Este modelo suporta as funcionalidades básicas necessárias para criar uma plataforma MOOC. Ainda assim, você provavelmente pode facilmente pensar em muitas adições úteis. Aqui estão alguns que eu inventei:
- Linguagem do curso e legendas para videoaulas
- Classificação da máquina
- Alunos revisando e avaliando as tarefas uns dos outros
- Ajuda financeira
- Uma opção que permite que os alunos retomem um curso depois de abandoná-lo
Também vale a pena mencionar que, de acordo com a Wikipedia “... os servidores de banco de dados do Coursera (executando em RDS) respondem a 10 bilhões de consultas SQL, e o Coursera atende cerca de 500 TB de tráfego por mês.” Isso foi em 2013. Um modelo de banco de dados MOOC real pode se parecer com o apresentado neste artigo, mas há muito mais trabalho a ser feito na modelagem e infraestrutura!
Neste artigo tentei mostrar a complexidade do modelo que está por trás de uma plataforma MOOC. Concentrei-me principalmente no Coursera e no edX como meus exemplos. Este modelo contém 18 mesas, mas apenas arranha a superfície. Sinta-se à vontade para comentar e compartilhar as melhorias que você implementaria no modelo. Se você acha que eu perdi algo importante, por favor me avise!
Gosta de aprender online? Experimente o LearnSQL.com – cursos interativos de SQL, disponíveis em seu navegador.