An open API service indexing awesome lists of open source software.

https://github.com/nelsonwenner/database-project-ead

:elephant: Database modeling of a distance learning system, done purely with SQL in one of the university's disciplines.
https://github.com/nelsonwenner/database-project-ead

database postgres postgresql

Last synced: 4 months ago
JSON representation

:elephant: Database modeling of a distance learning system, done purely with SQL in one of the university's disciplines.

Awesome Lists containing this project

README

          

Database project - EAD


Made by @nelsondiaas


Made by @ofelipegabriel321



License



Stargazers

O Projeto Plataforma EAD é um conjunto de comandos SQL que auxilia redes de Ensino à Distância com o fornecimento de um de um modelo básico para a armazenagem e manipulação de dados.

## Require
* Postgres

## Features
- Suporte de armazenamento, manipulação e utilização de mecanismos de usuários para Alunos e Professores, que possuem diferentes propriedades/possibilidades dentro do sistema;
- Suporte de armazenamento e manipulação de cursos relacionados a um professor;
- Suporte de armazenamento e manipulação de módulos relacionados a um curso, a alunos cursando e a outros módulos pré-requisito;
- Suporte de armazenamento e manipulação de disciplinas relacionados a um módulo;
- Suporte de armazenamento e manipulação de vídeoaulas relacionados a uma disciplina e a alunos que as assistiram;
- Suporte de armazenamento e manipulação de questionários relacionados a uma disciplina;
- Suporte de armazenamento e manipulação de questões relacionados a uma disciplina, a questionários e a alunos que as responderam.

## Project Class Diagram

![Diagrama de Classes - Projeto Plataforma EAD](https://user-images.githubusercontent.com/40550247/73898195-54d07380-4867-11ea-93d0-ac4993f5589b.png)

## Installation

1. Faça o [download do projeto em ZIP](https://github.com/nelsondiaas/database-project-ead/archive/master.zip) ou clone o projeto pelo bash com o comando `$ git clone https://github.com/nelsondiaas/database-project-ead`.
2. Para a instalação de toda a estrutura do banco de dados existem duas opções:
1. Executar toda parte do arquivo único [main.sql](main.sql) até antes da parte de execuções.
2. Executar, na seguinte ordem, os aquivos [tables_creation.sql](tables_creation.sql), [auxiliary_functions.sql](auxiliary_functions.sql), [main_functions.sql](main_functions.sql), [user_functions.sql](user_functions.sql), [trigger_functions.sql](trigger_functions.sql), [triggers.sql](triggers.sql) e [groups.sql](groups.sql).

## Usage
É possível a execução dos métodos principais e métodos de usuários desenvolvidos por meio do arquivo [run.sql] (ou a parte execuções no arquivo main.sql) e, claro, a edição manual dos arquivos SQL desses métodos, das tabelas, dos outros métodos e das triggers.

### Principais especificações de funções e triggers:

Auxiliary Functions

ALUNO_AINDA_CURSANDO

***Verifica se o aluno ainda está cursando o curso.***
- ***Entrada***:
- *[int]* código do aluno que se deseja verificar se ainda está cursando;
- *[int]* código do curso em que essa verificação será direcionada.
- ***Saída***:
- *[boolean]* boleano sobre o aluno ainda está cursando o curso.

ALUNO_JA_CURSOU

***Verifica se o aluno já cursou (e não cursa mais) o curso.***
- ***Entrada***:
- *[int]* código do aluno que se deseja verificar se já cursou;
- *[int]* código do curso em que essa verificação será direcionada.
- ***Saída***:
- *[boolean]* boleano sobre o aluno já ter cursado (e não cursar mais) o curso.

VERIFICAR_CPF_USUARIO_JA_REGISTRADO

***Verifica se existe algum usuário da tabela especificada com o cpf especificado.***
- ***Entrada***:
- *[text]* cpf do usuário;
- *[text]* tabela do usuário.
- ***Saída***:
- *[boolean]* booleano sobre existir algum usuário da tabela especificada com o cpf especificado.

VERIFICAR_EMAIL_USUARIO_JA_REGISTRADO

***Verifica se existe algum usuário da tabela especificada com o email especificado.***
- ***Entrada***:
- *[text]* email do usuário;
- *[text]* tabela do usuário.
- ***Saída***: [boolean] booleano sobre existir algum usuário da tabela especificada com o email especificado.

VERIFICAR_EXISTENCIA_ALUNOS_CURSANDO

***Verifica se existe algum aluno cursando o curso especificado.***
- ***Entrada***:
- *[int]* código do curso.
- ***Saída***:
- *[boolean]* booleano sobre existir algum aluno cursando o curso especificado.

VERIFICAR_POSSIBILIDADE_DELETE_UPDATE_NO_CURSO

***Aplica casos de exceção caso ocorrer alguma alteração dentro de um curso com ele estando publicado ou com alunos que ainda estão cursando.***
- ***Entrada***:
- *[int]* código do curso.
- ***Casos de exceções***:
- curso publicado;
- existência de alunos cursando.

VALIDAR_DISCIPLINA



***Verifica se a disciplina é válida (possui 3 videoaulas).***
- ***Entrada***:
- *[int]* código da disciplina.
- ***Saída***:
- *[boolean]* booleano sobre a disciplina ser válida.

VALIDAR_MODULO

***Verifica se o módulo é válido (possui 3 disciplinas válidas).***
- ***Entrada***:
- *[int]* código do módulo.
- ***Saída***:
- *[boolean]* booleano sobre o módulo ser válido.

VALIDAR_CURSO

***Verifica se o curso é válido (possui 3 módulos válidos).***
- ***Entrada***:
- *[int]* código do curso.
- ***Saída***:
- *[boolean]* booleano sobre o curso ser válido.

CONFIGURAR_ACESSIBILIDADE_ALUNO_MODULO

***Configura a acessabilidade de um aluno_modulo, adicionando um aluno_modulo para cada módulo do curso. a acessabilidade é configurada como true para os módulos que não possuem pré-requisitos.***
- ***Entrada***:
- *[int]* código do aluno;
- *[int]* código do curso.

VERIFICAR_SUFICIENTE_ASSISTIDO_PARA_AVALIAR

***Verifica se o aluno assistiu uma quantidade de videoaulas e uma quantidade de tempo suficiente para poder avaliar o curso (consideramos ter assistido 10% do número de vídeoaulas e 15% do tempo de vídeoaulas como o mínimo para isso).***
- ***Entrada***:
- *[int]* código do aluno;
- *[int]* código do curso.
- ***Saída***:
- *[boolean]* booleano sobre o aluno poder avaliar o curso.

VERIFICAR_SE_MODULOS_FICAM_ACESSIVEIS

***Torna acessivel algum(ns) módulo(s) que possuem, como pré-requisito o módulo passado, ficando ele(s) acessível(is) no aluno_modulo.***
- ***Entrada***:
- *[int]* código do modulo (que deve ter ficado com a meta_concluida antes de executar essa função) que pode ser pré-requisito para outros módulos; código do aluno que irá passar a ter seus módulos acessíveis.

VERIFICAR_VALIDADE_PRE_REQUISITO

***Verifica se é válido relacionar um módulo com outro na tabela pré-requisito. ou seja, os módulos não devem entrar em um estado em que um não consiga acessar o outro e vice-versa pois eles têm um ao outro como pré-requisito (impasse de pré-requisito entre módulos).***
- ***Entrada***:
- *[int]* código do modulo que será o módulo no pré-requisito;
- *[int]* código do modulo que será o módulo pré-requisito no pré-requisito.
- ***Saída***:
- *[boolean]* booleano sobre a possibilidade dos módulos se associarem entre si na tabela de pré-requisitos.

Main Functions

INSERIR_ALUNO_E_PROFESSOR

***Insere um usuário na sua tabela (existem as possibilidades de inserir aluno e professor).***
- ***Entrada***:
- *[text]* nome do usuário;
- *[text]* cpf do usuário;
- *[date]* data de nascimento do usuário;
- *[text]* email do usuário;
- *[text]* senha do usuário;
- *[text]* tabela do usuário.

ATUALIZAR_SALDO

***Atualiza o saldo de um usuário a partir do valor a ser alterado, seu código e tabela.***
- ***Entrada***:
- *[float]* valor a ser alterado no saldo do usuário;
- *[int]* código do usuário;
- *[text]* nome da tabela do usuário.
- ***Casos de exceções***:
- nome da tabela inválido; código de usuário inválido.

RECEBER_SALARIO

***Faz o professor receber o salário adquirido pelas vendas dos seus curso.***
- ***Entrada***:
- *[int]* código do professor que irá receber o salário.
- ***Casos de exceções***:
- código de usuário inválido.

COMPRAR_CURSO

***Realiza a compra do curso: insere ou atualiza o aluno_curso, dependendo se o aluno já cursou o curso.***
- ***Entrada***:
- *[int]* código do aluno;
- *[int]* código do curso.

AVALIAR_CURSO

***Permite a avaliação do curso por parte do aluno.***
- ***Entrada***:
- *[int]* código do aluno_curso;
- *[float]* nota de avaliação para o curso.

CRIAR_CURSO

***Cria um curso unido a um professor.***
- ***Entrada***:
- *[int]* código do professor;
- *[text]* nome do curso;
- *[text]* descrição do curso;
- *[float]* preço do curso.

PUBLICAR_CURSO

***Publica o curso.***
- ***Entrada***:
- *[int]* código do curso.

CRIAR_MODULOS

***Cria módulos unidos a um professor.***
- ***Entrada***:
- *[int]* código do professor;
- *[text[]]* nomes dos módulos;
- *[text[]]* descrições dos módulos.

CRIAR_PRE_REQUISITO

***Cria um vínculo entre módulos na tabela pré-requisito.***
- ***Entrada***:
- *[int]* código do módulo;
- *[int]* código do módulo pré-requisito.

CRIAR_DISCIPLINAS

***Cria disciplinas unidas a um módulo.***
- ***Entrada***:
- *[int]* código do módulo;
- *[text[]]* nomes das disciplinas;
- *[text[]]* descrições das disciplinas.

CRIAR_VIDEO_AULAS

***Cria videoaulas unidas a disciplinas.***
- ***Entrada***:
- *[int]* código da disciplina;
- *[text[]]* títulos das videoaulas;
- *[text[]]* descrições das videoaulas;
- *[int[]]* durações das videoaulas.

ASSISTIR_VIDEO_AULA

***Faz o aluno assistir à videoaula (faz um vínculo aluno_video_assistido).***
- ***Entrada***:
- *[int]* código do aluno;
- *[int]* código da videoaula.

CRIAR_QUESTAO

***Cria uma questão unida a uma disciplina.***
- ***Entrada***:
- *[int]* código da disciplina;
- *[text]* texto da questão.

CORRIGIR_QUESTAO

***Corrige uma questao_aluno com um texto que representa se a resposta está correta.***
- ***Entrada***:
- *[int]* código do vínculo questao_aluno corrigido;
- *[text]* resposta correta inserida.

CRIAR_QUESTIONARIO

***Cria um questionário unido a uma disciplina.***
- ***Entrada***:
- *[int]* nome do questionário;
- *[int]* código da disciplina.

VINCULAR_QUESTAO_A_QUESTIONARIO

***Cria um vínculo entre a questão e o questionário na tabela questao_questionario.***
- ***Entrada***:
- *[int]* código do questionário vínculado;
- *[int]* código da questão vinculada.

SUBMETER_RESPOSTA_DE_QUESTAO

***Faz o aluno submeter uma resposta para uma questão por meio do aluno_questao.***
- ***Entrada***:
- *[int]* código do aluno;
- *[int]* código da questão;
- *[text]* resposta para a questão.

Trigger Functions

CONTROLAR_EVENTOS_USUARIO_BEFORE

***Faz controle sobre as ações tomadas antes de ocorrer um insert, update ou delete em uma tabela aluno ou professor.***
- ***Casos de exceções***:
- idade menor que 18;
- cpf já registrado anteriormente;
- email já registrado anteriormente;
- saldo negativo;
- alteração de data de nascimento;
- alteração do email.
- ***Saída***:
- *[trigger]*.

CONTROLAR_EVENTOS_ALUNO_AFTER

***Faz controle sobre as ações tomadas depois de ocorrer um insert, update ou delete em uma tabela aluno. ações: criar um novo usuário no grupo aluno (login role); atualizar a senha do usuário (login role); deletar usuário (login role).***
- ***Saída***:
- *[trigger]*.

CONTROLAR_EVENTOS_PROFESSOR_AFTER

***Faz controle sobre as ações tomadas depois de ocorrer um insert, update ou delete em uma tabela professor. Ações: criar um novo usuário no grupo professor (login role); atualizar a senha do usuário (login role); deletar usuário (login role).***
- ***Saída***:
- *[trigger]*.

CONTROLAR_EVENTOS_CURSO_BEFORE

***Faz controle sobre as ações tomadas antes de ocorrer um insert, update ou delete em uma tabela curso. ações: calcular duração do curso caso necessário.***
- ***Casos de exceções***:
- código de professor inválido;
- curso ser publicado sem ter disponibilidade;
- código de curso inválido.
- ***Saída***:
- *[trigger]*.

CONTROLAR_EVENTOS_ALUNO_CURSO_BEFORE

***Faz controle sobre as ações tomadas antes de ocorrer um insert, update ou delete em uma tabela aluno_curso. ações: aplicar a cobrança pela compra do curso.***
- ***Casos de exceções***:
- código de aluno inválido;
- código de curso inválido;
- curso não publicado;
- aluno envolvido nas alterações não estar cursando;
- não ter assistido videoaulas o suficiente para poder avaliar o curso;
- ter uma nota de avaliação fora do intervalo 0~5.
- ***Saída***:
- *[trigger]*.

CONTROLAR_EVENTOS_ALUNO_CURSO_AFTER

***Faz controle sobre as ações tomadas depois de ocorrer um insert, update ou delete em uma tabela aluno_curso.***
- ***Saída***:
- *[trigger]*.

CONTROLAR_EVENTOS_MODULO_AFTER

***Faz controle sobre as ações tomadas depois de ocorrer um insert, update ou delete em uma tabela módulo. ações: incrementar/decrementar o número de módulos; atualizar o publicado e a disponibilidade do curso caso necessário.***
- ***Saída***:
- *[trigger]*.

CONTROLAR_EVENTOS_ALUNO_MODULO_AFTER

***Faz controle sobre as ações tomadas depois de ocorrer um insert, update ou delete em uma tabela aluno_modulo. ações: tornar módulos acessíveis.***
- ***Saída***:
- *[trigger]*.

CONTROLAR_EVENTOS_DISCIPLINA_AFTER

***Faz controle sobre as ações tomadas depois de ocorrer um insert, update ou delete em uma tabela disciplina. ações: atualizar o publicado e a disponibilidade do curso caso necessário.***
- ***Saída***:
- *[trigger]*.

CONTROLAR_EVENTOS_VIDEO_AULA_AFTER

***Faz controle sobre as ações tomadas depois de ocorrer um insert, update ou delete em uma tabela disciplina. ações: atualizar o publicado e a disponibilidade do curso caso necessário.***
- ***Saída***:
- *[trigger]*.

CONTROLAR_EVENTOS_ALUNO_VIDEO_ASSISTIDO_AFTER

***Faz controle sobre as ações tomadas depois de ocorrer um insert, update ou delete em uma tabela aluno_video_assistido. ações: atualizar o booleano que representa que a meta do módulo foi concluída/alcançada, caso necessário.***
- ***Saída***:
- *[trigger]*.

Triggers

EVENTOS_ALUNO_BEFORE

***Gatilho para ações tomadas antes de ocorrer um insert, update ou delete em uma tabela aluno.***

EVENTOS_ALUNO_AFTER

***Gatilho para ações tomadas depois de ocorrer um insert, update ou delete em uma tabela aluno.***

EVENTOS_PROFESSOR_BEFORE

***Gatilho: para ações tomadas antes de ocorrer um insert, update ou delete em uma tabela professor.***

EVENTOS_PROFESSOR_AFTER

***Gatilho: para ações tomadas depois de ocorrer um insert, update ou delete em uma tabela professor.***

EVENTOS_CURSO_BEFORE

***Gatilho: para ações tomadas antes de ocorrer um insert, update ou delete em uma tabela curso.***

EVENTOS_ALUNO_CURSO_BEFORE

***Gatilho: para ações tomadas depois de ocorrer um insert, update ou delete em uma tabela curso.***

EVENTOS_ALUNO_CURSO_AFTER

***Gatilho: para ações tomadas depois de ocorrer um insert, update ou delete em uma tabela aluno_curso.***

EVENTOS_MODULO_AFTER

***Gatilho: para ações tomadas depois de ocorrer um insert, update ou delete em uma tabela módulo.***

EVENTOS_ALUNO_MODULO_AFTER

***Gatilho: para ações tomadas depois de ocorrer um insert, update ou delete em uma tabela aluno_modulo.***

EVENTOS_DISCIPLINA_AFTER

***Gatilho: para ações tomadas depois de ocorrer um insert, update ou delete em uma tabela disciplina.***

EVENTOS_VIDEO_AULA_AFTER

***Gatilho: para ações tomadas depois de ocorrer um insert, update ou delete em uma tabela videoaula.***

EVENTOS_ALUNO_VIDEO_ASSISTIDO_AFTER

***Gatilho: para ações tomadas depois de ocorrer um insert, update ou delete em uma tabela aluno_video_assistido.***

## License
Este projeto está licenciado sob a licença MIT. Consulte o arquivo [LICENSE](LICENSE) para obter mais detalhes.

---