Banco de Dados
Visão Geral
O banco de dados da aplicação foi construído em PostgreSQL, garantindo robustez, escalabilidade e suporte a operações complexas. Ele é estruturado com diversas tabelas que representam as entidades do laboratório (estudantes, professores, técnicos, projetos, documentos, processos seletivos, permissões e contratos). O acesso ao banco é feito pelo ORM Sequelize, que abstrai queries SQL e facilita a manipulação de dados com segurança contra SQL Injection.
Tecnologias
- PostgreSQL: SGBD relacional open source, usado como base de dados principal.
- Sequelize: ORM para Node.js que gerencia migrações, associações, validações e abstração de queries SQL.
Migrações
O uso de migrações via Sequelize permite:
- Controle de versão do banco.
- Criação e atualização de tabelas de forma automatizada.
- Rastreabilidade de mudanças na estrutura de dados.
Dump do Banco
O esquema completo do banco de dados pode ser acessado em: Esquema do banco de dados.
Estrutura de Tabelas
As principais tabelas são:
- students → Armazena dados de bolsistas (informações pessoais, curso, GRR, renda, documentos).
- professor → Registro de professores vinculados ao laboratório.
- technician → Cadastro de técnicos.
- clt → Trabalhadores contratados via CLT.
- scholarship_type → Tipos de bolsas (nacionais ou não, valores, categorias).
- student_scholarships → Relação entre estudantes e bolsas.
- projects → Informações de projetos (datas, status, valor, integrantes).
- partners → Parceiros vinculados ao laboratório.
- partners_project → Relação entre parceiros e projetos.
- documents → Documentos armazenados no S3, apenas a bucket_key é salva no banco.
- document_permission → Relação entre documentos e permissões de acesso.
- ps (processos seletivos) → Editais e informações de processos seletivos.
- ps_form → Detalhes dos participantes em processos seletivos.
- ps_relation → Relação entre participantes e processos seletivos.
- ps_evaluation → Feedback dos processos seletivos.
- user_system → Usuários do sistema, com suporte a autenticação, verificação de e-mail e permissões.
- permissions → Lista de permissões disponíveis (admin, common, manager).
- user_permissions → Relação entre usuários e permissões.
- student_project_participation → Relação de estudantes com projetos.
- professor_project_participation → Relação de professores com projetos.
- technician_project_participation → Relação de técnicos com projetos.
- clt_project_participation → Relação de CLTs com projetos.
- partner_student → Relação entre parceiros e estudantes.
- scholarship_ps_relation → Liga bolsas a processos seletivos.
- student_contract → Contratos de estudantes.
- student_contract_relation → Relação entre estudantes e contratos.
- contract_amendments → Termos aditivos de contratos (armazenados no S3).
- project_contract_amendments → Relação entre aditivos e projetos.
- logs → Registro de logs de acesso (método, status_code, URL, IP, user_agent, etc.).
Permissões Padrão
O sistema garante que as permissões iniciais existam ao criar o banco:
admin
common
manager
Essas permissões são inseridas automaticamente caso ainda não existam.
Integração com S3
- Os arquivos (como documentos e aditivos) não ficam armazenados no banco, apenas as referências (bucket keys).
- O acesso real é feito via Amazon S3, garantindo escalabilidade e redução de sobrecarga no Postgres.
Conclusão
A modelagem foi feita para representar a realidade do laboratório, permitindo o gerenciamento de pessoas, projetos, bolsas, permissões, documentos e processos seletivos de forma completa. A combinação PostgreSQL + Sequelize + S3 garante robustez, segurança e flexibilidade para evoluir o sistema no futuro.