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