Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • W Wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Vincula
  • Wiki
  • Wiki
  • Banco de Dados

Last edited by Flávia Carvalho Tavaniello Nov 03, 2025
Page history
This is an old version of this page. You can view the most recent version or browse the history.

Banco de Dados

Home Convenções e Diretrizes Tecnologias Banco de dados

Para o banco de dados do projeto Vincula, foram unidos dois sistemas de banco de dados: PostgreSQL e Neo4J. Ambos rodam dentro de um container Docker, o que garante que todos os desenvolvedores possuam o mesmo ambiente. Foi escolhido o banco de dados relacional devido a integridade e coesão que os dados devem apresentar entre si para que sejam utilizados e manipulados ao longo da aplicação. Foi somado a ele um banco de dados não relacional, o Neo4J, que é um banco de dados orientado a grafo, o que facilita a criação dos grafos de vínculos entre os dados de uma investigação. Além disso, a nível de código, foi utilizada a biblioteca SQLAlchemy, responsável por facilitar o mapeamento das entidades como classes de Python.

Em relação a modelagem, existem cinco tabelas no banco de dados relacional e mais duas entidades centrais para o banco não relacional que se interconectam no projeto conforme a imagem abaixo.

BANCO_VINCULA__3_

Tabelas PostgreSQL:

  • User: armazena as informações sobre os usuários da aplicação. Possui campo de _id _(chave primária), name, password e role(indica o cargo do usuário no sistema e vai ser usado para níveis de permissão na aplicação) image

  • Case: armazena as informações de cada caso a ser investigado. Possui campo de _id _(chave primária), _case_number _(utilizado pelo MP para identificar um caso), name, description, status, creation_date, update_date e owner (indica quem é o dono do caso, pois é uma chave estrangeira para a tabela de User). image

  • Suspect: são as pessoas suspeitas de um caso. Possui id (chave primária), name, cpf_cnpj, phone_number e case_id (para poder relacionar o registro com o caso do qual faz parte) image

  • Archive: armazena as informações dos arquivos submetidos pelo usuário para poderem compor o caso. Possui campo de id (chave primária), url (vai indicar o arquivo em si), creation_date e case_id (relaciona o arquivo com o caso do qual faz parte) image

  • User_Case: é uma tabela auxiliar para identificar quais usuário estão presentes em qual caso, com atributo de ID (chave primária), case_id (chave estrangeira para a tabela de casos), user_id (chave estrangeira para a tabela de usuários) e creation_date (registro de qual essa ligação foi feita).

Entidades Neo4J:

  • Case: é um nó que representa um caso investigativo. Cada caso é identificado pelo seu case_number, e inclui informações sobre: origem (tipo do arquivo: SIMBA, SITTEL ou RIF), lista de arquivos nos quais o caso foi identificado (file_name[]), e identificador do caso no sistema relacional (vincula_case_id), que corresponde diretamente ao campo CASE.id no PostgreSQL.

  • Person: é um nó representa um sujeito envolvido nos casos, podendo ser uma pessoa física ou jurídica. Cada nó de pessoa inclui atributos como: identity (CPF, CNPJ), name (nome do titular, investigado ou entidade), phone_number[] (número de telefone encontrado nos dados), e file_name[] (arquivos em que a pessoa aparece), e vincula_case_id (referência ao caso correspondente no sistema relacional).

  • Involved_in: é uma aresta que conecta entidades do grafo e indica a relação de envolvimento de uma pessoa em um caso.

Clone repository
  • Arquitetura
  • Banco de Dados
  • Convenções e Diretrizes
  • Designs e Mockups
  • Tecnologias
  • Home