Database
 sql >> Base de Dados >  >> RDS >> Database

Um modelo de banco de dados para uma plataforma MOOC


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 exclusivo
  • commitment – uma descrição textual do compromisso provável, por ex. “5 semanas de estudo, 5-7 horas/semana”
  • description – uma descrição do curso
  • specialization_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 relacionado
  • material_no – um número ordinal atribuído a vários materiais do capítulo. Junto com o chapter_id atributo, este atributo forma a chave alternativa (única) da tabela.
  • material_type_id – é uma referência ao material_type tabela
  • mandatory – 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 curso
  • status_id – uma referência ao status dicionário; isso registra o desempenho de um aluno nesse curso
  • status_date – a data em que um status foi atribuído
  • final_grade – a nota (em porcentagem) que o aluno obteve para aquele curso
  • certificate_ID – um número de identificação do certificado que a plataforma gera quando o aluno é aprovado no curso
  • certificate_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.