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.
- Host: GitHub
- URL: https://github.com/nelsonwenner/database-project-ead
- Owner: nelsonwenner
- License: mit
- Created: 2019-07-03T12:34:38.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2021-04-20T22:13:36.000Z (about 5 years ago)
- Last Synced: 2025-10-19T12:56:51.949Z (8 months ago)
- Topics: database, postgres, postgresql
- Language: PLpgSQL
- Homepage:
- Size: 67.4 KB
- Stars: 5
- Watchers: 0
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Database project - EAD
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

## 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.
---