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




