Home | Convenções e Diretrizes | Tecnologias | Banco de dados |
---|
O banco de dados escolhido foi o PostgreSQL que roda 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. 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 oito tabelas que se relacionam no projeto conforme a imagem abaixo.
-
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).
-
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)
-
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)
-
Analyzed_person: é uma tabela auxiliar para armazenar os dados de pessoas ou empresas citadas ao longo dos arquivos de fontes externas, como o simba, sittel e o rif. Possui atributo de id (chave primária), cpf_cnpj, name, phone, address.
-
Data_simba_detailed_extract: armazena as informações provenientes do SIMBA. Possui atributo de id (chave primária), fk_analysed_person (chave estrangeira para tabela de analyzed_person), name e fk_archive_id (chave estrangeira para a tabela de Archive).
-
Data_sittel: armazena as informações provenientes do SITTEL. Possui atributo de id (chave primária), originating_number (número que fez a ligação), destination_number (número que recebeu a ligação), fk_subscriber_origin (relaciona na tabela de analyzed_person quem é o dono da linha que fez a ligação), fk_assigned_origin (relaciona na tabela de analyzed_person quem foi a pessoa que de fato fez a ligação), fk_subscriber_destination (relaciona na tabela de analyzed_person quem é o dono da linha que recebeu a ligação), fk_assigned_destination (relaciona na tabela de analyzed_person quem é que de fato recebeu a ligação), fk_archive_id (chave estrangeira para a tabela de Archive).
-
Data_riffs: armazena as informações provenientes do RIF. Possui atributo de id (chave primária), indexer, rif_number, name_involved, fk_analysed_person (chave estrangeira para tabela de analyzed_person), type_envolved, fk_archive_id (chave estrangeira para a tabela de Archive).