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

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