Skip to content

Estrutura dos Dados

Jhony Lucas edited this page Jun 17, 2024 · 2 revisions

Este documento contém uma série de modelos de dados e diagramas de banco de dados para diferentes aplicações desse projeto. Cada modelo de dados é descrito com seus campos, relacionamentos e lógica de negócio associada. Os diagramas de banco de dados são gerados usando a ferramenta Mermaid, que permite a visualização de modelos de dados de forma clara e concisa.

Indíce de Modelos

Para facilitar a navegação, os modelos de dados estão organizados em ordem alfabética. Cada modelo é descrito com seus campos, relacionamentos e lógica de negócio associada.

Access

Modelo que representa os acessos realizados por usuários em um determinado domínio.

Campos do Modelo

Nome do Campo Tipo (SQL) Nulo Valor Padrão Descrição
id BigAutoField Não Identificador único do acesso.
user ForeignKey Não Referência ao usuário que realizou o acesso. Relacionado ao modelo Account.
token ForeignKey Não Referência ao token utilizado para o acesso. Relacionado ao modelo Token.
domain ForeignKey Não Referência ao domínio acessado. Relacionado ao modelo Domain.
timestamp DateTimeField Não Data e hora em que o acesso foi realizado.
success BooleanField Não False Indica se o acesso foi bem-sucedido ou não.

Diagrama do Modelo

erDiagram
    Access {
        BigAutoField id
        ForeignKey user
        ForeignKey token
        ForeignKey domain
        DateTimeField timestamp
        BooleanField success
    }
    
    Account {
        
    }
    
    Token {
        BigAutoField id
        CharField token
        BooleanField is_active
        DateTimeField created_at
        DateTimeField expiry_date
        ForeignKey domain
        ForeignKey user
    }
    
    Domain {
        
    }
    
    Access }o--|| Account: user
    Access }o--|| Token: token
    Access }o--|| Domain: domain
Loading

Lógica de Negócio

O modelo Access é utilizado para registrar cada tentativa de acesso realizada por um usuário a um domínio específico, utilizando um token. Cada registro no modelo contém informações cruciais como o usuário que tentou o acesso, o token utilizado, o domínio acessado, a data e hora da tentativa de acesso, e se a tentativa foi bem-sucedida ou não.

A lógica de negócio em torno do modelo Access pode incluir validações de segurança, como verificar se o token é válido e se ainda está ativo, além de armazenar logs de tentativas de acesso para auditoria e análise de padrões de uso. Isso pode ser útil para detectar comportamentos anômalos e prevenir fraudes ou acessos não autorizados.

Account

Modelo que representa uma conta de usuário na aplicação.

Campos do Modelo

Nome do Campo Tipo SQL Nulo Valor Padrão Descrição
id BigAutoField Não Identificador único da conta.
password CharField(128) Não Senha do usuário.
last_login DateTimeField Sim Data e hora do último login.
is_superuser BooleanField Não Indica se o usuário é um superusuário.
uuid UUIDField Não f70a7a52-fa49-4fe3-a8d2-1dcdd917aeee Identificador único universal da conta.
email CharField(254) Não Endereço de e-mail do usuário.
username CharField(40) Sim Nome de usuário.
first_name CharField(40) Não Primeiro nome do usuário.
last_name CharField(40) Não Sobrenome do usuário.
full_name CharField(100) Sim Nome completo do usuário.
birth_date DateField Sim Data de nascimento do usuário.
picture FileField Sim Foto de perfil do usuário.
twitter CharField(255) Sim Perfil do Twitter do usuário.
linkedin CharField(255) Sim Perfil do LinkedIn do usuário.
github CharField(255) Sim Perfil do GitHub do usuário.
website CharField(200) Sim Website do usuário.
description TextField Sim Descrição do usuário.
description_pt TextField Sim Descrição do usuário em português.
description_en TextField Sim Descrição do usuário em inglês.
description_es TextField Sim Descrição do usuário em espanhol.
is_admin BooleanField Não Indica se o usuário é um administrador.
is_active BooleanField Não Indica se a conta do usuário está ativa.
is_email_visible BooleanField Não Indica se o e-mail do usuário é visível para outros usuários.
profile IntegerField Não 2 Perfil do usuário na aplicação.
created_at DateTimeField Não Data e hora de criação da conta.
updated_at DateTimeField Não Data e hora da última atualização da conta.
deleted_at DateTimeField Sim Data e hora de exclusão da conta.
work_area TextField Sim Área de trabalho do usuário.
work_role TextField Sim Função de trabalho do usuário.
work_size TextField Sim Tamanho da equipe de trabalho do usuário.
work_goal TextField Sim Objetivo do trabalho do usuário.
work_data_tool TextField Sim Ferramenta de dados utilizada pelo usuário em seu trabalho.
discovery_method TextField Sim Método pelo qual o usuário descobriu a aplicação.
available_for_research TextField Sim Disponibilidade do usuário para pesquisas.
user_permissions ManyToManyField Não Relacionamento com o modelo Permission para permissões do usuário.
organizations ManyToManyField Não Relacionamento com o modelo Organization.
groups ManyToManyField Não Relacionamento com o modelo BDGroup.
staff_groups ManyToManyField Não Relacionamento com o modelo Group para grupos de funcionários.

Diagrama do Modelo

erDiagram
    Account {
        BigAutoField id
        CharField password
        DateTimeField last_login
        BooleanField is_superuser
        UUIDField uuid
        CharField email
        CharField username
        CharField first_name
        CharField last_name
        CharField full_name
        DateField birth_date
        FileField picture
        CharField twitter
        CharField linkedin
        CharField github
        CharField website
        TextField description
        TextField description_pt
        TextField description_en
        TextField description_es
        BooleanField is_admin
        BooleanField is_active
        BooleanField is_email_visible
        IntegerField profile
        DateTimeField created_at
        DateTimeField updated_at
        DateTimeField deleted_at
        TextField work_area
        TextField work_role
        TextField work_size
        TextField work_goal
        TextField work_data_tool
        TextField discovery_method
        TextField available_for_research
    }
    Career {
    }
    Subscription {
    }
    Token {
    }
    Access {
    }
    Customer {
    }
    Analysis {
    }
    Table {
    }
    InformationRequest {
    }
    Permission {

    }
    Organization {
    }
    BDGroup {
    }
    Group {
    }

    Account ||--o{ Career : "has"
    Account ||--o{ Subscription : "has internal_subscription"
    Account }o--o{ Subscription : "has subscription"
    Account ||--o{ Token : "has"
    Account ||--o{ Access : "has"
    Account ||--o{ Customer : "has"
    Account }o--o{ Analysis : "has"
    Account ||--o{ Table : "has tables_published"
    Account ||--o{ Table : "has tables_cleaned"
    Account ||--o{ InformationRequest : "has"
    Account }o--o{ Permission : "has"
    Account }o--o{ Organization : "has"
    Account }o--o{ BDGroup : "has"
    Account }o--o{ Group : "has"
Loading

Lógica de Negócio

O modelo Account representa os usuários do sistema e está relacionado a outras entidades que gerenciam registros de logs, carreiras, assinaturas, tokens, acessos, clientes, análises, tabelas, solicitações de informação, permissões, organizações e grupos. Cada conta de usuário possui informações pessoais e credenciais de acesso, além de configurações de perfil e preferências. A lógica de negócio envolve gerenciamento de credenciais de acesso e autenticação, controle de permissões, gerenciamento de assinaturas e perfis, e integração com redes sociais e ferramentas de trabalho. A estrutura detalhada permite uma robusta gestão de usuários, facilitando a administração e personalização do uso da aplicação.

Analysis

O modelo Analysis representa uma análise detalhada com várias características e relacionamentos com outros modelos.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
coverages ForeignKey Sim Relacionamento com o modelo Coverage.
observation_levels ForeignKey Sim Relacionamento com o modelo ObservationLevel.
quality_checks ForeignKey Sim Relacionamento com o modelo QualityCheck.
id UUIDField Não Identificador único da análise.
name CharField(255) Sim Nome da análise.
name_pt CharField(255) Sim Nome da análise em português.
name_en CharField(255) Sim Nome da análise em inglês.
name_es CharField(255) Sim Nome da análise em espanhol.
description TextField Sim Descrição da análise.
description_pt TextField Sim Descrição da análise em português.
description_en TextField Sim Descrição da análise em inglês.
description_es TextField Sim Descrição da análise em espanhol.
analysis_type ForeignKey Não Relacionamento com o modelo AnalysisType.
url CharField(255) Sim URL associada à análise.
datasets ManyToManyField Não Relacionamento com o modelo Dataset.
themes ManyToManyField Não Relacionamento com o modelo Theme.
tags ManyToManyField Não Relacionamento com o modelo Tag.
authors ManyToManyField Não Relacionamento com o modelo Account.

Diagrama do Modelo

erDiagram
    Analysis {
        UUID id
        CharField name
        CharField name_pt
        CharField name_en
        CharField name_es
        TextField description
        TextField description_pt
        TextField description_en
        TextField description_es
        CharField url
    }
    Coverage {}
    ObservationLevel {}
    QualityCheck {}
    AnalysisType {}
    Dataset {}
    Theme {}
    Tag {}
    Account {}
    Analysis ||--o{ Coverage : coverages
    Analysis ||--o{ ObservationLevel : observation_levels
    Analysis ||--o{ QualityCheck : quality_checks
    Analysis ||--|| AnalysisType : analysis_type
    Analysis ||--o{ Dataset : datasets
    Analysis ||--o{ Theme : themes
    Analysis ||--o{ Tag : tags
    Analysis ||--o{ Account : authors
Loading

Lógica de Negócio do Modelo

O modelo Analysis é utilizado para armazenar informações detalhadas sobre uma análise específica. Cada análise pode estar associada a várias coberturas (coverages), níveis de observação (observation_levels) e verificações de qualidade (quality_checks). Além disso, uma análise deve ser classificada por um tipo específico de análise (analysis_type) e pode estar relacionada a múltiplos conjuntos de dados (datasets), temas (themes), tags (tags) e autores (authors).

Os campos de nome e descrição estão disponíveis em múltiplos idiomas (português, inglês e espanhol) para suportar uma audiência internacional. A URL (url) pode ser utilizada para fornecer um link direto para mais informações ou recursos adicionais relacionados à análise.

A estrutura do modelo e seus relacionamentos permitem uma flexibilidade significativa na forma como as análises são categorizadas e associadas a outros elementos do sistema, garantindo uma organização coerente e acessível das informações.

AnalysisType

Este modelo representa os tipos de análise que podem ser realizados. Cada tipo de análise tem um identificador único e pode ser traduzido em múltiplos idiomas.

Campos do modelo

Nome do Campo Tipo (SQL) Nulo Valor Padrão Descrição
id UUID Não Identificador único do tipo de análise.
slug VARCHAR(255) Não Uma string única que pode ser usada na URL.
name VARCHAR(255) Não Nome do tipo de análise.
name_pt VARCHAR(255) Sim NULL Nome do tipo de análise em Português.
name_en VARCHAR(255) Sim NULL Nome do tipo de análise em Inglês.
name_es VARCHAR(255) Sim NULL Nome do tipo de análise em Espanhol.

Diagrama do modelo

erDiagram
    AnalysisType {
        UUID id
        VARCHAR slug
        VARCHAR name
        VARCHAR name_pt
        VARCHAR name_en
        VARCHAR name_es
    }

    Analysis {}

    AnalysisType ||--o{ Analysis : analyses
Loading

Lógica de negócio

O modelo AnalysisType serve para categorizar diferentes tipos de análises que podem ser realizadas dentro do sistema. Cada tipo de análise é identificado de forma única pelo campo id e possui um slug que pode ser utilizado em URLs amigáveis. Além do nome principal (name), o modelo permite a internacionalização ao oferecer campos opcionais para nomes em Português (name_pt), Inglês (name_en) e Espanhol (name_es). A relação com o modelo Analysis indica que um tipo de análise pode estar associado a muitas análises específicas, facilitando a organização e a categorização dentro da aplicação.

Area

O modelo Area representa uma área específica e suas associações com coberturas, organizações e fontes de dados brutas.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id UUIDField Não Não Identificador único da área.
slug SlugField Não Não Identificador curto e único usado na URL.
name CharField(255) Não Não Nome da área.
name_pt CharField(255) Sim Não Nome da área em Português.
name_en CharField(255) Sim Não Nome da área em Inglês.
name_es CharField(255) Sim Não Nome da área em Espanhol.

Diagrama do Modelo

erDiagram
    Area {
        UUID id
        SlugField slug
        CharField name
        CharField name_pt
        CharField name_en
        CharField name_es
    }
    Coverage {}
    Organization {}
    RawDataSource {}
    Area ||--o{ Coverage: coverages
    Area ||--o{ Organization: organizations
    Area }o--o{ RawDataSource: raw_data_sources
Loading

Lógica de Negócio

O modelo Area, como descrito, é crucial para categorizar e organizar diferentes aspectos dentro de um determinado contexto. Cada área está associada a várias coberturas e organizações, indicando que uma área pode abranger múltiplos aspectos e estar sob a gestão de diferentes entidades. Além disso, as áreas podem ser associadas a diversas fontes de dados brutas, permitindo a agregação e análise de dados de várias origens. Este modelo facilita a organização lógica e hierárquica de informações dentro de um sistema, assegurando que cada área tenha uma identificação única (UUID) e possa ser referenciada de maneira consistente através de slugs.

Availability

Modelo que representa a disponibilidade de recursos em diferentes fontes de dados.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id UUIDField Não - Identificador único do registro
slug SlugField Não - Identificador legível para URL
name CharField(255) Não - Nome do recurso
name_pt CharField(255) Sim - Nome do recurso em Português
name_en CharField(255) Sim - Nome do recurso em Inglês
name_es CharField(255) Sim - Nome do recurso em Espanhol

Diagrama do Modelo

erDiagram
    Availability {
        UUID id
        SlugField slug
        CharField name
        CharField name_pt
        CharField name_en
        CharField name_es
    }
    RawDataSource {}
    RawDataSource ||--o{ Availability : "has many"
Loading

Lógica de Negócio

O modelo Availability é utilizado para gerenciar a disponibilidade de recursos em diferentes fontes de dados, representadas pelo modelo RawDataSource. Cada Availability está associada a uma ou mais RawDataSource, permitindo que se tenha um controle granular sobre a disponibilidade de cada recurso em diferentes contextos. O campo slug facilita a criação de URLs amigáveis para acesso aos registros, enquanto os campos name, name_pt, name_en e name_es permitem a internacionalização dos nomes dos recursos, tornando o sistema acessível para usuários de diferentes idiomas.

BDGroup

O modelo BDGroup representa um grupo e suas associações com funções específicas e usuários.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id BigAutoField Não None Identificador único do grupo.
name CharField(255) Não None Nome do grupo, com um limite de 255 caracteres.
description TextField Sim None Descrição detalhada do grupo.
roles ManyToManyField Não None Campo de muitos para muitos relacionado ao modelo BDRole, que define as funções associadas.

Diagrama do Modelo

erDiagram
    BDGroup {
        BigAutoField id
        CharField name
        TextField description
    }
    BDGroupRole {}
    Account {}
    BDRole {}
    
    BDGroupRole ||--o{ BDGroup: bdgrouprole
    Account }o--o{ BDGroup: user
    BDRole }o--o{ BDGroup: roles
Loading

Lógica de Negócio

O modelo BDGroup é usado para organizar diferentes grupos, com cada grupo podendo ter múltiplos usuários (representados pelo modelo Account) e múltiplas funções (representadas pelo modelo BDRole). Cada BDGroup também está associado a um papel específico definido pelo modelo BDGroupRole. Essa estrutura permite uma gestão flexível e escalável de permissões e acessos dentro do sistema, facilitando a administração de usuários e suas respectivas funções dentro de diferentes grupos.

BDGroupRole

Modelo que define a relação entre grupos e funções dentro de uma organização.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id BigAutoField Não Nenhum Identificador único do registro.
group ForeignKey Não Nenhum Chave estrangeira referenciando o modelo BDGroup.
role ForeignKey Não Nenhum Chave estrangeira referenciando o modelo BDRole.
organization ForeignKey Não Nenhum Chave estrangeira referenciando o modelo Organization.

Diagrama do Modelo

erDiagram
    BDGroupRole {
        BigAutoField id
        ForeignKey group
        ForeignKey role
        ForeignKey organization
    }

    BDGroup {}
    BDRole {}
    Organization {}

    BDGroupRole ||--o{ BDGroup: group
    BDGroupRole ||--o{ BDRole: role
    BDGroupRole ||--o{ Organization: organization
Loading

Lógica de Negócio

O modelo BDGroupRole é utilizado para gerenciar as permissões e funções de um grupo dentro de uma organização. Cada registro neste modelo associa um grupo específico a uma função específica dentro de uma organização específica. Isso permite uma gestão granular e flexível das permissões, facilitando a administração de grandes estruturas organizacionais com múltiplos grupos e funções. Cada grupo pode ter múltiplas funções em diferentes organizações, e cada função pode ser associada a múltiplos grupos, permitindo uma estrutura robusta e escalável de controle de acesso.

BDRole

A tabela BDRole representa os papéis (roles) que podem ser atribuídos a diferentes grupos e entidades dentro do sistema. Cada papel pode ter várias permissões associadas e pode pertencer a diferentes grupos.

Campos do Modelo

Nome do campo Tipo (SQL) Nulo Valor Padrão Descrição
id BIGINT Não AUTO INCREMENT Identificador único do papel.
name VARCHAR(255) Não NULL Nome do papel.
description TEXT Sim NULL Descrição detalhada do papel.
permissions MANYTOMANY Não NULL Relação muitos-para-muitos com o modelo Permission.

Diagrama do Modelo

erDiagram
    BDRole {
        BIGINT id
        VARCHAR(255) name
        TEXT description
    }
    BDGroup {}
    BDGroupRole {}
    Permission {}

    BDRole ||--o{ BDGroup : "group"
    BDRole ||--o{ BDGroupRole : "bdgrouprole"
    BDRole ||--o{ Permission : "permissions"
Loading

Lógica de Negócio

O modelo BDRole é fundamental para a gestão de permissões e acesso dentro do sistema. Cada papel (BDRole) pode ser associado a múltiplos grupos (BDGroup) e pode ter múltiplas permissões (Permission). Isso permite uma gestão granular das permissões, onde cada papel pode definir um conjunto específico de permissões que podem ser atribuídas a diferentes grupos de usuários. A relação com BDGroupRole permite que papéis específicos sejam vinculados a grupos específicos, facilitando a organização e a aplicação de permissões de forma estruturada e eficiente.

BigQueryType

Modelo que representa um tipo de consulta no BigQuery, com um nome e uma relação com colunas.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
columns ForeignKey Não - Chave estrangeira que referencia colunas.
id UUID Não - Identificador único do tipo UUID.
name Char(255) Não - Nome do tipo de consulta no BigQuery.

Diagrama do Modelo

erDiagram
    BigQueryType {
        UUID id
        Char name
    }
    Column {}
    BigQueryType ||--o{ Column : "columns"
Loading

Lógica de Negócio

O modelo BigQueryType é utilizado para representar diferentes tipos de consultas que podem ser executadas no BigQuery. Cada tipo de consulta possui um nome único e está associado a múltiplas colunas através de uma relação de chave estrangeira. Por exemplo, um tipo de consulta pode ser "Relatório de Vendas" e estar associado a colunas como "data_venda", "valor_total", entre outras. A relação entre BigQueryType e Column é de um-para-muitos, significando que um tipo de consulta pode ter várias colunas associadas, mas cada coluna está associada a apenas um tipo de consulta.

Career

O modelo Career representa a trajetória profissional de um usuário em uma determinada conta.

Campos do modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id UUID Não Identificador único do registro
account ForeignKey Não Referência a uma conta (relacionado ao modelo Account)
team Char(40) Não Nome do time em que o usuário está inserido
role Char(40) Não Papel ou função desempenhada pelo usuário
level Char(40) Não Nível de atuação do usuário (ex: Júnior, Sênior)
start_at Date Sim Data de início na função
end_at Date Sim Data de término na função (se aplicável)
created_at DateTime Não Data e hora de criação do registro
updated_at DateTime Não Data e hora da última atualização do registro

Diagrama do modelo

erDiagram
    Career {
        UUID id
        UUID account
        Char team
        Char role
        Char level
        Date start_at
        Date end_at
        DateTime created_at
        DateTime updated_at
    }
    Account {}
    Career }o--|| Account: "many to one"
Loading

Lógica de negócio

O modelo Career serve para registrar a trajetória de um usuário dentro de uma conta específica, detalhando o time, a função e o nível de atuação. Este modelo é essencial para acompanhar a evolução e as mudanças de posição dos usuários ao longo do tempo. A data de início (start_at) e a data de término (end_at) permitem traçar um histórico preciso das diferentes funções desempenhadas por um usuário. O campo created_at é utilizado para saber quando o registro foi criado e o campo updated_at para rastrear a última atualização do registro. Estes campos são importantes para manter a integridade e a rastreabilidade das informações.

CloudTable

Modelo que representa uma tabela específica na nuvem do Google Cloud Platform (GCP).

Campos do Modelo

Nome do Campo Tipo (SQL) Nulo Valor Padrão Descrição
id UUID Não - Identificador único da tabela
table Foreign Key (Table) Não - Referência para o modelo Table
gcp_project_id VARCHAR(255) Não - Identificador do projeto no Google Cloud Platform
gcp_dataset_id VARCHAR(255) Não - Identificador do dataset no Google Cloud Platform
gcp_table_id VARCHAR(255) Não - Identificador da tabela no Google Cloud Platform
columns ManyToMany (Column) Não - Referência para as colunas associadas a esta tabela na nuvem

Diagrama do Modelo

erDiagram
    CloudTable {
        UUID id
        VARCHAR gcp_project_id
        VARCHAR gcp_dataset_id
        VARCHAR gcp_table_id
    }
    
    Table {}
    Column {}

    CloudTable ||--o{ Table: table
    CloudTable }o--o{ Column: columns
Loading

Lógica de Negócio

O modelo CloudTable é utilizado para mapear uma tabela localizada no Google Cloud Platform (GCP) a um registro local. Cada CloudTable está associada a um Table local que guarda sua configuração básica e a um conjunto de Column que define a estrutura dos dados presentes na tabela na nuvem. A ligação entre os modelos permite uma abstração e gerenciamento mais eficiente das tabelas e colunas no GCP, possibilitando operações como sincronização, atualizações e consultas estruturadas baseadas nas definições locais.

Column

O modelo Column representa uma coluna em uma tabela de banco de dados e contém informações detalhadas sobre suas propriedades e relações com outros modelos.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
order PositiveIntegerField Não Ordem da coluna na tabela.
id UUIDField Não Identificador único da coluna (UUID).
table ForeignKey Não Relacionamento com o modelo Table (muitos para um).
name CharField(255) Não Nome da coluna.
name_pt CharField(255) Sim Nome da coluna em português.
name_en CharField(255) Sim Nome da coluna em inglês.
name_es CharField(255) Sim Nome da coluna em espanhol.
name_staging CharField(255) Sim Nome da coluna na tabela de staging.
name_staging_pt CharField(255) Sim Nome da coluna na tabela de staging em português.
name_staging_en CharField(255) Sim Nome da coluna na tabela de staging em inglês.
name_staging_es CharField(255) Sim Nome da coluna na tabela de staging em espanhol.
bigquery_type ForeignKey Não Relacionamento com o modelo BigQueryType (muitos para um).
description TextField Sim Descrição da coluna.
description_pt TextField Sim Descrição da coluna em português.
description_en TextField Sim Descrição da coluna em inglês.
description_es TextField Sim Descrição da coluna em espanhol.
covered_by_dictionary BooleanField Sim False Indica se a coluna é coberta por um dicionário.
is_primary_key BooleanField Sim False Indica se a coluna é chave primária.
directory_primary_key ForeignKey Sim Relacionamento com o modelo Column (muitos para um), representando a chave primária no diretório.
measurement_unit CharField(255) Sim Unidade de medida da coluna.
contains_sensitive_data BooleanField Sim False Indica se a coluna contém dados sensíveis.
observations TextField Sim Observações sobre a coluna.
observations_pt TextField Sim Observações sobre a coluna em português.
observations_en TextField Sim Observações sobre a coluna em inglês.
observations_es TextField Sim Observações sobre a coluna em espanhol.
is_in_staging BooleanField Não True Indica se a coluna está na tabela de staging.
is_partition BooleanField Não False Indica se a coluna é uma partição.
observation_level ForeignKey Sim Relacionamento com o modelo ObservationLevel (muitos para um).
version IntegerField Sim Versão da coluna.
status ForeignKey Sim Relacionamento com o modelo Status (muitos para um).
is_closed BooleanField Não False Indica se a coluna está fechada.

Diagrama do Modelo

erDiagram
    Column {
        UUID id
        PositiveInteger order
        CharField name
        CharField name_pt
        CharField name_en
        CharField name_es
        CharField name_staging
        CharField name_staging_pt
        CharField name_staging_en
        CharField name_staging_es
        TextField description
        TextField description_pt
        TextField description_en
        TextField description_es
        BooleanField covered_by_dictionary
        BooleanField is_primary_key
        CharField measurement_unit
        BooleanField contains_sensitive_data
        TextField observations
        TextField observations_pt
        TextField observations_en
        TextField observations_es
        BooleanField is_in_staging
        BooleanField is_partition
        IntegerField version
        BooleanField is_closed
    }
    Coverage ||--o{ Column: "coverages"
    Column ||--o{ Column: "columns"
    ColumnOriginalName ||--o{ Column: "column_original_names"
    Dictionary ||--o{ Column: "dictionaries"
    CloudTable ||--o{ Column: "cloud_tables"
    QualityCheck ||--o{ Column: "quality_checks"
    Table ||--o{ Column: "table"
    BigQueryType ||--o{ Column: "bigquery_type"
    Column ||--o{ Column: "directory_primary_key"
    ObservationLevel ||--o{ Column: "observation_level"
    Status ||--o{ Column: "status"
Loading

Lógica de Negócio

O modelo Column é vital para a estrutura de dados desse projeto, pois define as propriedades e relações de uma coluna dentro de uma tabela. Cada coluna pode ter uma variedade de metadados, incluindo nomes em diferentes idiomas, descrições detalhadas e informações sobre sensibilidade de dados. Além disso, o modelo gerencia as chaves primárias, as partições e a associação com dicionários e tipos de dados específicos no BigQuery. A inclusão do campo order permite organizar a sequência das colunas, enquanto os campos relacionados a observações e versões facilitam o rastreamento de mudanças e comentários. A lógica de negócio também considera a integração com tabelas de staging, garantindo que os dados sejam preparados adequadamente antes do carregamento final.

ColumnOriginalName

Descrição resumida do modelo: O modelo ColumnOriginalName armazena os nomes originais das colunas em diferentes idiomas, além de fazer referência a coberturas (coverages) e colunas (columns).

Campos do modelo

Nome do Campo Tipo (SQL) É Nulo Valor Padrão Descrição
coverages UUID Sim Chave estrangeira relacionada ao modelo Coverage com um relacionamento um-para-muitos (one-to-many)
id UUID Não Identificador único do registro
column UUID Não Chave estrangeira relacionada ao modelo Column com um relacionamento muitos-para-um (many-to-one)
name VARCHAR(255) Não Nome original da coluna
name_pt VARCHAR(255) Sim Nome da coluna em português
name_en VARCHAR(255) Sim Nome da coluna em inglês
name_es VARCHAR(255) Sim Nome da coluna em espanhol

Diagrama do modelo

erDiagram
    ColumnOriginalName {
        UUID coverages
        UUID id
        UUID column
        VARCHAR name
        VARCHAR name_pt
        VARCHAR name_en
        VARCHAR name_es
    }

    Coverage {}
    Column {}

    ColumnOriginalName ||--o{ Coverage : "one-to-many"
    ColumnOriginalName }o--|| Column : "many-to-one"
Loading

Lógica de negócio do modelo

O modelo ColumnOriginalName serve para armazenar os nomes das colunas em diferentes idiomas, facilitando a internacionalização e a localização do sistema. Cada registro liga uma coluna a seus nomes em português, inglês e espanhol, permitindo que o sistema exiba as informações corretas para os usuários com base no idioma selecionado. Além disso, o modelo é vinculado a coberturas (coverages), o que pode ser útil para segmentar ou categorizar colunas em diferentes contextos ou domínios de aplicação.

Coverage

Este modelo representa uma cobertura de dados, associando várias entidades e permitindo a rastreabilidade e o controle sobre diferentes aspectos e fontes de dados.

Campos do Modelo

Nome do Campo Tipo É Nulo Valor Padrão Descrição
datetime_ranges UUID Não Chave estrangeira relacionada ao modelo DateTimeRange com uma relação de um para muitos.
id UUID Não Identificador único para a cobertura.
table UUID Não Chave estrangeira relacionada ao modelo Table com uma relação de muitos para um.
raw_data_source UUID Não Chave estrangeira relacionada ao modelo RawDataSource com uma relação de muitos para um.
information_request UUID Não Chave estrangeira relacionada ao modelo InformationRequest com uma relação de muitos para um.
column UUID Não Chave estrangeira relacionada ao modelo Column com uma relação de muitos para um.
column_original_name UUID Não Chave estrangeira relacionada ao modelo ColumnOriginalName com uma relação de muitos para um.
key UUID Não Chave estrangeira relacionada ao modelo Key com uma relação de muitos para um.
analysis UUID Não Chave estrangeira relacionada ao modelo Analysis com uma relação de muitos para um.
area UUID Não Chave estrangeira relacionada ao modelo Area com uma relação de muitos para um.
is_closed Boolean Não False Indica se a cobertura está fechada.

Diagrama do Modelo

erDiagram
    Coverage {
        UUID datetime_ranges
        UUID id
        UUID table
        UUID raw_data_source
        UUID information_request
        UUID column
        UUID column_original_name
        UUID key
        UUID analysis
        UUID area
        Boolean is_closed
    }

    DateTimeRange {}
    Table {}
    RawDataSource {}
    InformationRequest {}
    Column {}
    ColumnOriginalName {}
    Key {}
    Analysis {}
    Area {}

    Coverage }o--|| DateTimeRange : "one to many"
    Coverage }|--|| Table : "many to one"
    Coverage }|--|| RawDataSource : "many to one"
    Coverage }|--|| InformationRequest : "many to one"
    Coverage }|--|| Column : "many to one"
    Coverage }|--|| ColumnOriginalName : "many to one"
    Coverage }|--|| Key : "many to one"
    Coverage }|--|| Analysis : "many to one"
    Coverage }|--|| Area : "many to one"
Loading

Lógica de Negócio

O modelo Coverage é central para a gestão de dados, permitindo a associação de várias entidades como colunas, tabelas, fontes de dados brutas, análises e áreas específicas. A cobertura pode representar um intervalo de datas através de uma relação de um para muitos com DateTimeRange, permitindo múltiplos intervalos para uma única cobertura. A flag is_closed indica se a cobertura está finalizada, ajudando no controle de processos que dependem da conclusão dessas coberturas. Este modelo é crucial para rastrear e gerenciar a origem e o status dos dados ao longo de diferentes estágios de processamento e análise.

Dataset

O modelo Dataset representa um conjunto de dados que pode ser analisado, visualizado e utilizado para diversos fins dentro da aplicação. Ele está associado a várias entidades importantes, como análises, tabelas, fontes de dados brutas, solicitações de informações, verificações de qualidade, entre outras. Este modelo é essencial para a organização e gerenciamento de dados na aplicação.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id UUIDField Não Identificador único para cada conjunto de dados.
slug SlugField Não Identificador curto e legível para URLs.
name CharField(255) Não Nome do conjunto de dados.
name_pt CharField(255) Sim NULL Nome do conjunto de dados em Português.
name_en CharField(255) Sim NULL Nome do conjunto de dados em Inglês.
name_es CharField(255) Sim NULL Nome do conjunto de dados em Espanhol.
description TextField Sim NULL Descrição detalhada do conjunto de dados.
description_pt TextField Sim NULL Descrição detalhada em Português.
description_en TextField Sim NULL Descrição detalhada em Inglês.
description_es TextField Sim NULL Descrição detalhada em Espanhol.
organization ForeignKey Não Referência à organização proprietária do conjunto de dados.
version IntegerField Sim NULL Versão do conjunto de dados.
status ForeignKey Sim NULL Status atual do conjunto de dados.
created_at DateTimeField Não Data e hora de criação do conjunto de dados.
updated_at DateTimeField Não Data e hora da última atualização do conjunto de dados.
is_closed BooleanField Não Indica se o conjunto de dados está fechado para modificações.
page_views BigIntegerField Não 0 Número de visualizações da página do conjunto de dados.
themes ManyToManyField Não Temas associados ao conjunto de dados.
tags ManyToManyField Não Tags associadas ao conjunto de dados.
analyses ManyToManyField Sim Análises relacionadas ao conjunto de dados.

Diagrama do Modelo

erDiagram
    Dataset {
        UUID id
        SlugField slug
        CharField name
        CharField name_pt
        CharField name_en
        CharField name_es
        TextField description
        TextField description_pt
        TextField description_en
        TextField description_es
        IntegerField version
        DateTimeField created_at
        DateTimeField updated_at
        BooleanField is_closed
        BigIntegerField page_views
    }

    Analysis {}
    Table {}
    RawDataSource {}
    InformationRequest {}
    QualityCheck {}
    Organization {}
    Status {}
    Theme {}
    Tag {}

    Dataset ||--o{ Analysis : "analyses"
    Dataset ||--o{ Table : "tables"
    Dataset ||--o{ RawDataSource : "raw_data_sources"
    Dataset ||--o{ InformationRequest : "information_requests"
    Dataset ||--o{ QualityCheck : "quality_checks"
    Dataset }o--|| Organization : "organization"
    Dataset }o--|| Status : "status"
    Dataset }o--o{ Theme : "themes"
    Dataset }o--o{ Tag : "tags"
Loading

Lógica de negócio do modelo

O modelo Dataset é fundamental para a gestão de conjuntos de dados na aplicação. Ele permite a associação de dados com diferentes níveis de descrição e categorização em múltiplos idiomas, facilitando a acessibilidade e interpretação dos dados por usuários de diferentes regiões. Através de suas relações com outros modelos, como análises, tabelas, fontes de dados brutas, solicitações de informações e verificações de qualidade, o Dataset oferece uma visão completa e integrada dos dados. Além disso, o controle de versão e status permite um gerenciamento eficiente das atualizações e do ciclo de vida dos conjuntos de dados. A contagem de visualizações da página do conjunto de dados ajuda a monitorar seu uso e popularidade. A lógica de negócio se beneficia da estrutura robusta e flexível para atender a diversas necessidades analíticas e de gerenciamento de dados.

DateTimeRange

O modelo DateTimeRange representa um intervalo de tempo com precisão até segundos. Ele está relacionado ao modelo Coverage, indicando que um intervalo de tempo é coberto por uma cobertura específica.

Campos do modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id UUIDField Não None Identificador único do intervalo de tempo.
start_year IntegerField Sim None Ano de início do intervalo.
start_semester IntegerField Sim None Semestre de início do intervalo.
start_quarter IntegerField Sim None Trimestre de início do intervalo.
start_month IntegerField Sim None Mês de início do intervalo.
start_day IntegerField Sim None Dia de início do intervalo.
start_hour IntegerField Sim None Hora de início do intervalo.
start_minute IntegerField Sim None Minuto de início do intervalo.
start_second IntegerField Sim None Segundo de início do intervalo.
end_year IntegerField Sim None Ano de término do intervalo.
end_semester IntegerField Sim None Semestre de término do intervalo.
end_quarter IntegerField Sim None Trimestre de término do intervalo.
end_month IntegerField Sim None Mês de término do intervalo.
end_day IntegerField Sim None Dia de término do intervalo.
end_hour IntegerField Sim None Hora de término do intervalo.
end_minute IntegerField Sim None Minuto de término do intervalo.
end_second IntegerField Sim None Segundo de término do intervalo.
interval IntegerField Sim None Intervalo de tempo.
is_closed BooleanField Não None Indica se o intervalo está fechado.

Diagrama do modelo

erDiagram
    DateTimeRange {
        UUID id
        UUID coverage_id
        INTEGER start_year
        INTEGER start_semester
        INTEGER start_quarter
        INTEGER start_month
        INTEGER start_day
        INTEGER start_hour
        INTEGER start_minute
        INTEGER start_second
        INTEGER end_year
        INTEGER end_semester
        INTEGER end_quarter
        INTEGER end_month
        INTEGER end_day
        INTEGER end_hour
        INTEGER end_minute
        INTEGER end_second
        INTEGER interval
        BOOLEAN is_closed
    }
    
    Coverage {}
    
    DateTimeRange }o--|| Coverage: coverage_id
Loading

Lógica de negócio

O modelo DateTimeRange é utilizado para definir intervalos de tempo específicos, que podem variar em precisão desde anos até segundos. Ele está diretamente associado a uma Coverage, o que implica que cada intervalo de tempo pertence a uma cobertura específica.

A lógica de negócio pode incluir validações para garantir que o intervalo de tempo é válido (por exemplo, a data de início deve ser anterior à data de término) e que os intervalos não se sobrepõem para uma mesma cobertura. A propriedade is_closed indica se o intervalo é fechado, ou seja, se já não pode ser modificado ou se está finalizado. Isso pode ser útil para cenários onde intervalos de tempo precisam ser congelados ou arquivados.

Dictionary

Este modelo representa um dicionário que mapeia chaves a colunas em um banco de dados.

Campos do Modelo

Nome do Campo Tipo (SQL) É Nulo Valor Padrão Descrição
id UUIDField Não Identificador único universal do dicionário.
column ForeignKey Não Chave estrangeira relacionada ao modelo Column.

Diagrama do Modelo

erDiagram
    Dictionary {
        UUID id
        ForeignKey keys
        ForeignKey column
    }

    Key {}
    Column {}

    Dictionary ||--o{ Key: keys
    Dictionary }o--|| Column: column
Loading

Lógica de Negócio

O modelo Dictionary armazena a relação entre keys e columns, onde uma chave pode estar associada a várias colunas e uma coluna pode estar associada a vários dicionários. O campo id serve como identificador único para cada entrada no dicionário. Essa estrutura permite a criação de mapas complexos de chaves para colunas, facilitando a organização e a recuperação de dados dentro do banco de dados.

Domain

O modelo Domain representa um domínio na aplicação, contendo informações sobre tokens, acessos e detalhes gerais como nome, descrição e status de atividade.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id BigAutoField Não - Identificador único do domínio.
name CharField(255) Não - Nome do domínio.
description TextField Sim - Descrição detalhada do domínio.
created_at DateTimeField Não - Data e hora de criação do domínio.
updated_at DateTimeField Não - Data e hora da última atualização do domínio.
is_active BooleanField Não True Indica se o domínio está ativo.

Diagrama do Modelo

erDiagram
    Domain {
        BigAutoField id
        CharField name
        TextField description
        DateTimeField created_at
        DateTimeField updated_at
        BooleanField is_active
    }
    Token {}
    Access {}

    Domain ||--o{ Token: "tokens"
    Domain ||--o{ Access: "accesses"
Loading

Lógica de Negócio do Modelo

O modelo Domain é central na aplicação, representando diferentes domínios que podem ter múltiplos tokens e acessos associados. O campo is_active permite ativar ou desativar um domínio, enquanto created_at e updated_at ajudam a manter o rastreamento temporal das alterações. As chaves estrangeiras tokens e accesses estabelecem relações de um-para-muitos com os modelos Token e Access, respectivamente, permitindo que um domínio tenha múltiplos tokens e acessos. Isso é útil para gerenciar permissões e autenticações de forma organizada.

Entity

O modelo Entity representa uma entidade que possui atributos como identificador único, nomes em diferentes idiomas e categorias.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id UUID Não Identificador único da entidade.
slug Slug Não Identificador legível por URL.
name Char(255) Não Nome da entidade.
name_pt Char(255) Sim Nome da entidade em português.
name_en Char(255) Sim Nome da entidade em inglês.
name_es Char(255) Sim Nome da entidade em espanhol.
category ForeignKey Não Categoria da entidade, relacionado ao modelo EntityCategory.

Diagrama do Modelo

erDiagram
    Entity {
        UUID id
        Slug slug
        Char name
        Char name_pt
        Char name_en
        Char name_es
        UUID category
        UUID updates
        UUID observation_levels
    }

    EntityCategory {}
    Update {}
    ObservationLevel {}

    EntityCategory ||--o{ Entity : "has many"
    Update ||--|{ Entity : "has many"
    ObservationLevel ||--|{ Entity : "has many"
Loading

Lógica de Negócio do Modelo

O modelo Entity serve como uma representação central de entidades no sistema, cada uma identificada por um UUID único e um slug amigável para URLs. O campo name é obrigatório, enquanto os campos de nome em diferentes idiomas (name_pt, name_en, name_es) são opcionais, permitindo suporte multilíngue.

Cada entidade está associada a uma categoria específica através de uma ForeignKey para o modelo EntityCategory, indicando a classificação da entidade. Além disso, uma entidade pode ter múltiplas atualizações (updates), representadas pelo modelo Update, e diferentes níveis de observação (observation_levels), representados pelo modelo ObservationLevel.

Essa estrutura permite uma organização flexível e expansível das entidades, suportando funcionalidades como categorização, histórico de atualizações e níveis de observação.

EntityCategory

EntityCategory é um modelo que representa categorias que podem ser associadas a entidades. Esse modelo permite a categorização de entidades em diferentes idiomas.

Campos do Modelo

Nome do Campo Tipo SQL É Nulo Valor Padrão Descrição
id UUID Não Identificador único do modelo
slug VARCHAR (SlugField) Não Identificador único legível por URL
name VARCHAR(255) Não Nome da categoria
name_pt VARCHAR(255) Sim Nome da categoria em português
name_en VARCHAR(255) Sim Nome da categoria em inglês
name_es VARCHAR(255) Sim Nome da categoria em espanhol

Diagrama do Modelo

erDiagram
    EntityCategory {
        UUID id
        VARCHAR slug
        VARCHAR name
        VARCHAR name_pt
        VARCHAR name_en
        VARCHAR name_es
        UUID entities
    }
    
    Entity {}

    EntityCategory ||--o{ Entity : "entities"
Loading

Lógica de Negócio

O modelo EntityCategory permite a categorização de entidades em diferentes idiomas, facilitando a organização e a busca por entidades específicas com base em categorias. Cada categoria pode ter um nome em múltiplos idiomas, proporcionando uma experiência de usuário mais inclusiva e acessível. A chave estrangeira entities relaciona uma categoria a várias entidades, permitindo que uma entidade pertença a múltiplas categorias. A lógica de negócio pode incluir validações para garantir que o slug seja único e que pelo menos um dos campos de nome (name, name_pt, name_en, name_es) esteja preenchido.

InformationRequest

Modelo que representa uma solicitação de informações dentro do sistema.

Campos do Modelo

Nome do Campo Tipo (SQL) Nulo Valor Padrão Descrição
order PositiveIntegerField Não Ordem da solicitação de informações.
id UUIDField Não Identificador único da solicitação de informações.
dataset ForeignKey Não Relacionamento com o modelo Dataset (muitos para um).
version IntegerField Sim Versão da solicitação de informações.
status ForeignKey Sim Relacionamento com o modelo Status (muitos para um).
created_at DateTimeField Não Data e hora de criação da solicitação de informações.
updated_at DateTimeField Não Data e hora da última atualização da solicitação de informações.
origin TextField Sim Origem da solicitação de informações.
number CharField(255) Não ?
url CharField(500) Sim URL associada à solicitação de informações.
started_at DateTimeField Sim Data e hora de início da solicitação de informações.
data_url CharField(500) Sim URL dos dados associados à solicitação de informações.
observations TextField Sim Observações gerais sobre a solicitação de informações.
observations_pt TextField Sim Observações em português sobre a solicitação de informações.
observations_en TextField Sim Observações em inglês sobre a solicitação de informações.
observations_es TextField Sim Observações em espanhol sobre a solicitação de informações.
started_by ForeignKey Sim Relacionamento com o modelo Account (muitos para um), referente ao usuário que iniciou.

Diagrama do Modelo

erDiagram
    InformationRequest {
        UUIDField id
        PositiveIntegerField order
        IntegerField version
        DateTimeField created_at
        DateTimeField updated_at
        TextField origin
        CharField number
        CharField url
        DateTimeField started_at
        CharField data_url
        TextField observations
        TextField observations_pt
        TextField observations_en
        TextField observations_es
    }

    Coverage {}
    Update {}
    ObservationLevel {}
    QualityCheck {}
    Dataset {}
    Status {}
    Account {}

    InformationRequest ||--o{ Coverage: coverages
    InformationRequest ||--o{ Update: updates
    InformationRequest ||--o{ ObservationLevel: observation_levels
    InformationRequest ||--o{ QualityCheck: quality_checks
    InformationRequest }o--|| Dataset: dataset
    InformationRequest }o--|| Status: status
    InformationRequest }o--|| Account: started_by
Loading

Lógica de Negócio

O modelo InformationRequest é crucial para o gerenciamento de solicitações de informações dentro do sistema. Ele permite a rastreabilidade e organização de diversas solicitações que podem ser feitas a partir de diferentes datasets, com múltiplos níveis de observação e verificações de qualidade. Cada solicitação possui um identificador único (UUID), uma ordem específica, e é associada a um dataset e status específicos. Além disso, o modelo permite armazenar observações em múltiplos idiomas, facilitando a internacionalização. O campo started_by relaciona a solicitação ao usuário que a iniciou, garantindo a responsabilidade e rastreabilidade das ações realizadas.

Key

Este modelo representa uma chave que está associada a uma cobertura, verificações de qualidade e um dicionário específico.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id UUID Não Nenhum Identificador único da chave
dictionary ForeignKey Não Nenhum Chave estrangeira para o modelo Dictionary
name CharField(255) Não Nenhum Nome da chave
value CharField(255) Não Nenhum Valor associado à chave

Diagrama do Modelo

erDiagram
    Key {
        UUID id
        CharField name
        CharField value
        ForeignKey dictionary
        ForeignKey coverages
        ForeignKey quality_checks
    }
    
    Dictionary {}
    Coverage {}
    QualityCheck {}

    Key ||--o{ Coverage: coverages
    Key ||--o{ QualityCheck: quality_checks
    Key }o--|| Dictionary: dictionary
Loading

Lógica de Negócio

O modelo Key é usado para armazenar pares de chave-valor que são específicos a um dicionário. Cada chave pode estar associada a múltiplas coberturas (Coverage) e verificações de qualidade (QualityCheck). O campo dictionary é obrigatório, indicando que uma chave deve sempre pertencer a um dicionário específico. As coberturas e verificações de qualidade são opcionais, permitindo uma flexibilidade na definição das chaves.

Language

Modelo que representa um idioma com várias fontes de dados brutas associadas.

Campos do Modelo

Nome do Campo Tipo SQL Nulo Valor Padrão Descrição
id UUIDField Não None Identificador único do idioma
slug SlugField Não None Identificador curto e legível para URLs
name CharField(255) Não None Nome do idioma
name_pt CharField(255) Sim None Nome do idioma em português
name_en CharField(255) Sim None Nome do idioma em inglês
name_es CharField(255) Sim None Nome do idioma em espanhol

Diagrama do Modelo

erDiagram
    Language {
        UUID id
        String slug
        String name
        String name_pt
        String name_en
        String name_es
    }

    RawDataSource {}

    Language ||--|{ RawDataSource : "raw_data_sources"
Loading

Lógica de Negócio

O modelo Language é utilizado para representar diferentes idiomas disponíveis em uma aplicação. Ele possui uma relação muitos para muitos com o modelo RawDataSource, que armazena várias fontes de dados brutas associadas a cada idioma. Isso permite que um idioma possa estar associado a várias fontes de dados e vice-versa.

Cada idioma é identificado por um UUID único e possui um slug que facilita a criação de URLs amigáveis. Além do nome principal (name), o modelo permite armazenar o nome do idioma em português (name_pt), inglês (name_en) e espanhol (name_es), facilitando a internacionalização e localização da aplicação.

License

Este modelo representa uma licença que pode estar relacionada a diferentes tabelas e fontes de dados brutas. Ele contém informações detalhadas sobre a licença, incluindo identificadores únicos e nomes em diferentes idiomas.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id UUIDField Não Identificador único universal da licença.
slug SlugField Não Identificador curto e único para a licença, geralmente usado em URLs.
name CharField(255) Não Nome da licença.
name_pt CharField(255) Sim Nome da licença em português.
name_en CharField(255) Sim Nome da licença em inglês.
name_es CharField(255) Sim Nome da licença em espanhol.
url CharField(200) Não URL onde mais informações sobre a licença podem ser encontradas.

Diagrama do Modelo

erDiagram
    License {
        UUID id
        string slug
        string name
        string name_pt
        string name_en
        string name_es
        string url
    }

    Table {}
    RawDataSource {}

    License ||--o{ Table: tables
    License ||--o{ RawDataSource: raw_data_sources
Loading

Lógica de Negócio

O modelo License serve para gerenciar as licenças associadas a diferentes tabelas e fontes de dados brutas. Cada licença deve ter um identificador único (id) e um slug para facilitar a referência nas URLs. O nome da licença pode ser armazenado em três idiomas diferentes para suportar a internacionalização. A URL fornece um link para mais informações sobre a licença. As relações com os modelos Table e RawDataSource indicam que uma licença pode estar associada a várias tabelas e fontes de dados brutas, permitindo uma gestão centralizada das permissões e condições de uso dos dados.

ObservationLevel

O modelo ObservationLevel representa um nível de observação que possui relações com diversas outras entidades, incluindo colunas, entidades, tabelas, fontes de dados brutas, solicitações de informações e análises.

Campos do Modelo

Nome do Campo Tipo Pode ser Nulo Valor Padrão Descrição
id UUIDField Não Identificador único para cada instância de ObservationLevel.
entity ForeignKey Não Chave estrangeira que referencia o modelo Entity, representando a entidade associada ao nível de observação.
table ForeignKey Sim Chave estrangeira que referencia o modelo Table, representando a tabela associada ao nível de observação.
raw_data_source ForeignKey Sim Chave estrangeira que referencia o modelo RawDataSource, representando a fonte de dados bruta associada.
information_request ForeignKey Sim Chave estrangeira que referencia o modelo InformationRequest, representando a solicitação de informação associada.
analysis ForeignKey Sim Chave estrangeira que referencia o modelo Analysis, representando a análise associada ao nível de observação.

Diagrama do Modelo

erDiagram
    ObservationLevel {
        UUID id
        UUID entity
        UUID table
        UUID raw_data_source
        UUID information_request
        UUID analysis
    }

    Column {}
    Entity {}
    Table {}
    RawDataSource {}
    InformationRequest {}
    Analysis {}

    ObservationLevel ||--o{ Column: columns
    ObservationLevel }o--|| Entity: entity
    ObservationLevel }o--|| Table: table
    ObservationLevel }o--|| RawDataSource: raw_data_source
    ObservationLevel }o--|| InformationRequest: information_request
    ObservationLevel }o--|| Analysis: analysis
Loading

Lógica de Negócio

O modelo ObservationLevel é crucial para a estruturação e organização de dados observacionais dentro do sistema. Cada instância do nível de observação pode estar associada a múltiplas colunas, definindo os dados a serem observados. A relação com a entidade (entity) é obrigatória, garantindo que cada nível de observação esteja claramente vinculado a uma entidade específica. Relações opcionais com tabelas, fontes de dados brutas, solicitações de informações e análises permitem uma flexibilidade significativa no uso e na aplicação dos níveis de observação, ajudando a integrar e correlacionar dados de diversas origens e contextos analíticos.

Organization

Descrição Resumida do Modelo

O modelo Organization representa uma entidade organizacional que pode estar associada a vários usuários, datasets, tabelas parceiras e áreas. Ele armazena informações detalhadas sobre a organização, incluindo nomes em diferentes idiomas, descrições, links para redes sociais e uma imagem de perfil.

Campos do Modelo

Nome do Campo Tipo SQL Nulo Valor Padrão Descrição
id UUID Não Nenhum Identificador único da organização.
slug VARCHAR(255) Não Nenhum Identificador curto e legível usado em URLs.
name VARCHAR(255) Não Nenhum Nome da organização.
name_pt VARCHAR(255) Sim Nenhum Nome da organização em português.
name_en VARCHAR(255) Sim Nenhum Nome da organização em inglês.
name_es VARCHAR(255) Sim Nenhum Nome da organização em espanhol.
description TEXT Sim Nenhum Descrição detalhada da organização.
description_pt TEXT Sim Nenhum Descrição detalhada da organização em português.
description_en TEXT Sim Nenhum Descrição detalhada da organização em inglês.
description_es TEXT Sim Nenhum Descrição detalhada da organização em espanhol.
area UUID (ForeignKey) Não Nenhum Referência à área relacionada à organização.
created_at TIMESTAMP Não Nenhum Data e hora de criação do registro.
updated_at TIMESTAMP Não Nenhum Data e hora da última atualização do registro.
website VARCHAR(255) Sim Nenhum URL do site da organização.
twitter VARCHAR(200) Sim Nenhum URL do perfil do Twitter da organização.
facebook VARCHAR(200) Sim Nenhum URL do perfil do Facebook da organização.
linkedin VARCHAR(200) Sim Nenhum URL do perfil do LinkedIn da organização.
instagram VARCHAR(200) Sim Nenhum URL do perfil do Instagram da organização.
picture BLOB Sim Nenhum Arquivo de imagem representando a organização.

Diagrama do Modelo

erDiagram
    Organization {
        UUID id
        VARCHAR slug
        VARCHAR name
        VARCHAR name_pt
        VARCHAR name_en
        VARCHAR name_es
        TEXT description
        TEXT description_pt
        TEXT description_en
        TEXT description_es
        UUID area
        TIMESTAMP created_at
        TIMESTAMP updated_at
        VARCHAR website
        VARCHAR twitter
        VARCHAR facebook
        VARCHAR linkedin
        VARCHAR instagram
        BLOB picture
    }

    BDGroupRole {}
    Account {}
    Dataset {}
    Table {}
    Area {}

    Organization ||--o{ BDGroupRole: "group_role"
    Organization }o--o{ Account: "user"
    Organization ||--o{ Dataset: "datasets"
    Organization ||--o{ Table: "partner_tables"
    Organization }o--|| Area: "area"
Loading

Lógica de Negócio do Modelo

O modelo Organization é utilizado para gerenciar e armazenar informações sobre organizações, permitindo a associação com usuários, datasets e tabelas parceiras. A lógica de negócio envolve garantir que cada organização tenha um identificador único e campos obrigatórios preenchidos como id, slug, name e area. O modelo também deve suportar internacionalização com campos de nome e descrição em diferentes idiomas. Além disso, ele deve permitir a fácil integração com redes sociais e a inclusão de uma imagem de perfil. As relações com os modelos BDGroupRole, Account, Dataset, Table e Area são essenciais para manter a integridade referencial e a consistência dos dados associados.

Pipeline

Modelo que representa um pipeline de dados, que é responsável por definir e executar uma sequência de processos para transformar dados de entrada em dados de saída.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id UUID Não N/A Identificador único do pipeline.
github_url VARCHAR(200) Não N/A URL do repositório no GitHub onde o código do pipeline está armazenado.

Diagrama do Modelo

erDiagram
    Pipeline {
        UUID id
        VARCHAR(200) github_url
        UUID tables
        UUID quality_checks
    }

    Table {}
    QualityCheck {}

    Pipeline ||--o{ Table : "tables"
    Pipeline ||--o{ QualityCheck : "quality_checks"
Loading

Lógica de Negócio

O modelo Pipeline é usado para representar uma sequência de operações que transformam dados em uma ou mais tabelas. Cada pipeline possui um identificador único, uma URL no GitHub onde o código que define o pipeline está armazenado, e referências a tabelas e verificações de qualidade. A URL do GitHub é um campo obrigatório para garantir que o código do pipeline esteja versionado e acessível. A relação com o modelo Table indica quais tabelas são processadas pelo pipeline, enquanto a relação com o modelo QualityCheck especifica quais verificações de qualidade são aplicadas aos dados durante ou após o processamento.

QualityCheck

O modelo QualityCheck é utilizado para armazenar informações sobre verificações de qualidade realizadas em diferentes componentes do sistema, como pipelines, análises, datasets, tabelas, colunas, chaves, fontes de dados brutas e solicitações de informação.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id UUID Não Identificador único da verificação de qualidade.
name Char(255) Sim Nome da verificação de qualidade.
name_pt Char(255) Sim Nome da verificação de qualidade em português.
name_en Char(255) Sim Nome da verificação de qualidade em inglês.
name_es Char(255) Sim Nome da verificação de qualidade em espanhol.
description Text Sim Descrição detalhada da verificação de qualidade.
description_pt Text Sim Descrição detalhada da verificação de qualidade em português.
description_en Text Sim Descrição detalhada da verificação de qualidade em inglês.
description_es Text Sim Descrição detalhada da verificação de qualidade em espanhol.
passed Boolean Não Indica se a verificação de qualidade foi aprovada ou não.
created_at DateTime Não Data e hora de criação do registro.
updated_at DateTime Não Data e hora da última atualização do registro.
pipeline ForeignKey Sim Referência ao modelo Pipeline, indicando a pipeline relacionada.
analysis ForeignKey Sim Referência ao modelo Analysis, indicando a análise relacionada.
dataset ForeignKey Sim Referência ao modelo Dataset, indicando o dataset relacionado.
table ForeignKey Sim Referência ao modelo Table, indicando a tabela relacionada.
column ForeignKey Sim Referência ao modelo Column, indicando a coluna relacionada.
key ForeignKey Sim Referência ao modelo Key, indicando a chave relacionada.
raw_data_source ForeignKey Sim Referência ao modelo RawDataSource, indicando a fonte de dados bruta relacionada.
information_request ForeignKey Sim Referência ao modelo InformationRequest, indicando a solicitação de informação relacionada.

Diagrama do Modelo

erDiagram
    QualityCheck {
        UUID id
        Char(255) name
        Char(255) name_pt
        Char(255) name_en
        Char(255) name_es
        Text description
        Text description_pt
        Text description_en
        Text description_es
        Boolean passed
        DateTime created_at
        DateTime updated_at
        UUID pipeline_id
        UUID analysis_id
        UUID dataset_id
        UUID table_id
        UUID column_id
        UUID key_id
        UUID raw_data_source_id
        UUID information_request_id
    }

    Pipeline {}
    Analysis {}
    Dataset {}
    Table {}
    Column {}
    Key {}
    RawDataSource {}
    InformationRequest {}

    QualityCheck ||--o{ Pipeline : "pipeline"
    QualityCheck ||--o{ Analysis : "analysis"
    QualityCheck ||--o{ Dataset : "dataset"
    QualityCheck ||--o{ Table : "table"
    QualityCheck ||--o{ Column : "column"
    QualityCheck ||--o{ Key : "key"
    QualityCheck ||--o{ RawDataSource : "raw_data_source"
    QualityCheck ||--o{ InformationRequest : "information_request"
Loading

Lógica de Negócio

O modelo QualityCheck é essencial para garantir a integridade e a qualidade dos dados e processos dentro do sistema. Ele permite rastrear e documentar verificações de qualidade em várias partes do sistema, como pipelines, análises, datasets, tabelas, colunas, chaves, fontes de dados brutas e solicitações de informação. Cada verificação de qualidade pode ser associada a um ou mais desses componentes, fornecendo um registro detalhado das verificações realizadas e seus resultados. Através deste modelo, é possível identificar rapidamente quaisquer problemas ou falhas nos processos de manipulação e análise de dados, possibilitando ações corretivas imediatas e garantindo a confiabilidade dos dados e processos do sistema.

RawDataSource

O modelo RawDataSource representa uma fonte de dados brutos que pode conter informações estruturadas ou não, disponibilizadas por diversas entidades. Este modelo armazena diversas propriedades da fonte de dados, incluindo informações de licenciamento, disponibilidade e requisitos de acesso.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id UUID Não Identificador único da fonte de dados.
name Char(255) Não Nome da fonte de dados.
name_pt Char(255) Sim Nome da fonte de dados em português.
name_en Char(255) Sim Nome da fonte de dados em inglês.
name_es Char(255) Sim Nome da fonte de dados em espanhol.
description Text Sim Descrição detalhada da fonte de dados.
description_pt Text Sim Descrição detalhada da fonte de dados em português.
description_en Text Sim Descrição detalhada da fonte de dados em inglês.
description_es Text Sim Descrição detalhada da fonte de dados em espanhol.
url Char(500) Sim URL para acessar a fonte de dados.
order PositiveInteger Não Ordem de prioridade ou exibição da fonte de dados.
dataset ForeignKey (Dataset) Não Relacionamento com o modelo Dataset.
availability ForeignKey (Availability) Não Relacionamento com o modelo Availability.
license ForeignKey (License) Sim Relacionamento com o modelo License.
created_at DateTime Não Data de criação do registro.
updated_at DateTime Não Data da última atualização do registro.
contains_structured_data Boolean Não Indica se a fonte de dados contém dados estruturados.
contains_api Boolean Não Indica se a fonte de dados fornece uma API.
is_free Boolean Não Indica se a fonte de dados é gratuita.
required_registration Boolean Não Indica se é necessário registro para acessar a fonte de dados.
version Integer Sim Versão da fonte de dados.
status ForeignKey (Status) Sim Relacionamento com o modelo Status.
area_ip_address_required ManyToManyField (Area) Não Relacionamento com o modelo Area.

Diagrama do Modelo

erDiagram
    RawDataSource {
        UUID id
        Char name
        Char name_pt
        Char name_en
        Char name_es
        Text description
        Text description_pt
        Text description_en
        Text description_es
        Char url
        PositiveInteger order
        DateTime created_at
        DateTime updated_at
        Boolean contains_structured_data
        Boolean contains_api
        Boolean is_free
        Boolean required_registration
        Integer version
    }

    Dataset ||--o{ RawDataSource: contains
    Availability ||--o{ RawDataSource: contains
    License ||--o{ RawDataSource: contains
    Status ||--o{ RawDataSource: contains
    Coverage ||--o{ RawDataSource: contains
    Update ||--o{ RawDataSource: contains
    ObservationLevel ||--o{ RawDataSource: contains
    QualityCheck ||--o{ RawDataSource: contains
    Table ||--o{ RawDataSource: contains
    Language ||--o{ RawDataSource: contains
    Area ||--o{ RawDataSource: contains
Loading

Lógica de Negócio

O modelo RawDataSource é essencial para o gerenciamento e catalogação das diversas fontes de dados brutos disponíveis. Cada fonte de dados pode ser associada a múltiplas tabelas, níveis de observação e verificações de qualidade. O campo order pode ser utilizado para priorizar ou ordenar a apresentação das fontes de dados em uma interface de usuário. As relações com modelos como Dataset, Availability, License, e Status permitem um controle granular sobre a disponibilidade, licenciamento e estado atual da fonte de dados. A presença de campos booleanos como contains_structured_data, contains_api, is_free, e required_registration facilita a filtragem e categorização das fontes de dados com base em suas características e requisitos de acesso.

RegistrationToken

O modelo RegistrationToken é utilizado para gerenciar tokens de registro, que são usados para validar e ativar contas de usuário no sistema.

Campos do Modelo

Nome do Campo Tipo SQL É Nulo Valor Padrão Descrição
id BigAutoField Não N/A Identificador único do token de registro.
token CharField(255) Não N/A O token de registro em si, uma string única.
created_at DateTimeField Não N/A Data e hora de criação do token.
used_at DateTimeField Sim N/A Data e hora em que o token foi utilizado.
active BooleanField Não True Indica se o token ainda está ativo ou não.

Diagrama do Modelo

erDiagram
    RegistrationToken {
        BigAutoField id
        CharField token
        DateTimeField created_at
        DateTimeField used_at
        BooleanField active
    }
Loading

Lógica de Negócio

O modelo RegistrationToken desempenha um papel crucial na segurança do processo de registro de usuários. Cada token gerado é único e associado a uma tentativa de registro específica. Quando um usuário se cadastra, um novo token é criado e enviado ao usuário (geralmente via email). O token deve ser validado dentro de um período de tempo definido, após o qual ele pode ser marcado como usado (used_at é preenchido) e inativado (active é definido como False). Isso garante que apenas usuários com acesso ao token válido possam ativar suas contas, prevenindo registros não autorizados.

Status

O modelo Status representa o estado ou condição de outros modelos dentro do sistema. Ele possui relacionamentos com os modelos Dataset, Table, Column, RawDataSource e InformationRequest, indicando que cada um desses modelos pode ter múltiplos estados associados.

Campos do Modelo

Nome do Campo Tipo É Nulo Valor Padrão Descrição
id UUIDField Não - Identificador único do status
slug SlugField Não - Identificador curto e único, usado para URLs e referências rápidas
name CharField(255) Não - Nome do status
name_pt CharField(255) Sim - Nome do status em Português
name_en CharField(255) Sim - Nome do status em Inglês
name_es CharField(255) Sim - Nome do status em Espanhol

Diagrama do Modelo

erDiagram
    Status {
        UUID id
        SlugField slug
        CharField name
        CharField name_pt
        CharField name_en
        CharField name_es
    }

    Dataset {}
    Table {}
    Column {}
    RawDataSource {}
    InformationRequest {}

    Status ||--o{ Dataset : datasets
    Status ||--o{ Table : tables
    Status ||--o{ Column : columns
    Status ||--o{ RawDataSource : raw_data_sources
    Status ||--o{ InformationRequest : information_requests
Loading

Lógica de Negócio

O modelo Status é essencial para rastrear e gerenciar o estado de outros componentes importantes do sistema, como Dataset, Table, Column, RawDataSource e InformationRequest. Cada Status contém informações de identificação e nomes em múltiplos idiomas, possibilitando a internacionalização. A lógica de negócio para Status pode incluir validações para garantir que cada slug seja único e que os nomes sejam consistentes e significativos para os usuários. Além disso, as mudanças de status podem acionar eventos específicos no sistema, como notificações ou atualizações em cascata nos objetos relacionados.

Subscription

O modelo Subscription é utilizado para representar uma assinatura dentro do sistema. Ele armazena informações sobre a criação, atualização, status de atividade e relações com outros modelos, como Account.

Campos do Modelo

Nome do Campo Tipo (SQL) É Nulo Valor Padrão Descrição
created_at DATETIME Não Data e hora da criação da assinatura.
updated_at DATETIME Não Data e hora da última atualização da assinatura.
id UUID Não Identificador único da assinatura.
is_active BOOLEAN Não Indica se a assinatura está ativa.
admin UUID (ForeignKey) Não Referência ao modelo Account, indicando o administrador da assinatura.
subscription UUID (OneToOne) Sim Referência a outra assinatura do djstripe
subscribers UUID (ManyToMany) Não Relação com o modelo Account, indicando os assinantes.

Diagrama do Modelo

erDiagram
    Subscription {
        UUID id
        DATETIME created_at
        DATETIME updated_at
        BOOLEAN is_active
        UUID admin
        UUID djstripe_subscription
        UUID subscribers
    }

    Account {}

    Subscription ||--o{ Account : "subscribers"
    Subscription ||--o{ DjstripeSubscription : "djstripe_subscription"
    Subscription }o--|| Account : "admin"
Loading

Lógica de Negócio

O modelo Subscription é essencial para gerenciar as assinaturas no sistema. Ele permite rastrear quando uma assinatura foi criada e atualizada, além de determinar se a assinatura está ativa ou não. A relação com o modelo Account é crucial, pois define quem é o administrador da assinatura e quais contas são assinantes. O campo subscription linka a Subscription com o modelo criado pela lib djstripe. A lógica de negócios pode incluir verificações para garantir que as assinaturas ativas estejam sempre atualizadas e que os administradores tenham permissões adequadas para gerenciar os assinantes.

Table

Este modelo representa uma tabela de dados e contém uma variedade de campos para armazenar informações sobre a tabela, como descrições, status, licença, organização parceira, entre outros.

Campos do Modelo

Nome do Campo Tipo (SQL) É Nulo Valor Padrão Descrição
coverages ForeignKey Sim Relacionamento com o modelo Coverage (um para muitos).
updates ForeignKey Sim Relacionamento com o modelo Update (um para muitos).
tableneighbor_a_set ForeignKey Sim Relacionamento com o modelo TableNeighbor (um para muitos).
tableneighbor_b_set ForeignKey Sim Relacionamento com o modelo TableNeighbor (um para muitos).
columns ForeignKey Sim Relacionamento com o modelo Column (um para muitos).
cloud_tables ForeignKey Sim Relacionamento com o modelo CloudTable (um para muitos).
observation_levels ForeignKey Sim Relacionamento com o modelo ObservationLevel (um para muitos).
quality_checks ForeignKey Sim Relacionamento com o modelo QualityCheck (um para muitos).
order PositiveIntegerField Não Ordem da tabela.
id UUIDField Não Identificador único da tabela.
slug SlugField Não Identificador único em formato de slug.
name CharField(255) Não Nome da tabela.
name_pt CharField(255) Sim Nome da tabela em português.
name_en CharField(255) Sim Nome da tabela em inglês.
name_es CharField(255) Sim Nome da tabela em espanhol.
description TextField Sim Descrição da tabela.
description_pt TextField Sim Descrição da tabela em português.
description_en TextField Sim Descrição da tabela em inglês.
description_es TextField Sim Descrição da tabela em espanhol.
dataset ForeignKey Não Relacionamento com o modelo Dataset (muitos para um).
version IntegerField Sim Versão da tabela.
status ForeignKey Sim Relacionamento com o modelo Status (muitos para um).
license ForeignKey Sim Relacionamento com o modelo License (muitos para um).
partner_organization ForeignKey Sim Relacionamento com o modelo Organization (muitos para um).
pipeline ForeignKey Sim Relacionamento com o modelo Pipeline (muitos para um).
is_directory BooleanField Sim Indica se a tabela é um diretório.
created_at DateTimeField Não Data e hora de criação da tabela.
updated_at DateTimeField Não Data e hora da última atualização da tabela.
published_by ForeignKey Sim Relacionamento com o modelo Account (muitos para um).
data_cleaned_by ForeignKey Sim Relacionamento com o modelo Account (muitos para um).
data_cleaning_description TextField Sim Descrição da limpeza de dados.
data_cleaning_code_url CharField(200) Sim URL do código de limpeza de dados.
raw_data_url CharField(500) Sim URL dos dados brutos.
auxiliary_files_url CharField(200) Sim URL dos arquivos auxiliares.
architecture_url CharField(200) Sim URL da arquitetura da tabela.
source_bucket_name CharField(255) Sim basedosdados Nome do bucket de origem.
uncompressed_file_size BigIntegerField Sim Tamanho do arquivo descompactado.
compressed_file_size BigIntegerField Sim Tamanho do arquivo compactado.
number_rows BigIntegerField Sim Número de linhas da tabela.
number_columns BigIntegerField Sim Número de colunas da tabela.
is_closed BooleanField Não Indica se a tabela está fechada.
page_views BigIntegerField Não Número de visualizações da página da tabela.
raw_data_source ManyToManyField Não Relacionamento com o modelo RawDataSource (muitos para muitos).

Diagrama do Modelo

erDiagram
    Table {
        UUID id
        PositiveInteger order
        Slug slug
        Char name
        Char name_pt
        Char name_en
        Char name_es
        Text description
        Text description_pt
        Text description_en
        Text description_es
        Integer version
        Boolean is_directory
        DateTime created_at
        DateTime updated_at
        Text data_cleaning_description
        Char data_cleaning_code_url
        Char raw_data_url
        Char auxiliary_files_url
        Char architecture_url
        Char source_bucket_name
        BigInteger uncompressed_file_size
        BigInteger compressed_file_size
        BigInteger number_rows
        BigInteger number_columns
        Boolean is_closed
        BigInteger page_views
    }

    Coverage {}
    Update {}
    TableNeighbor {}
    Column {}
    CloudTable {}
    ObservationLevel {}
    QualityCheck {}
    Dataset {}
    Status {}
    License {}
    Organization {}
    Pipeline {}
    Account {}
    RawDataSource {}

    Table ||--o{ Coverage : coverages
    Table ||--o{ Update : updates
    Table ||--o{ TableNeighbor : tableneighbor_a_set
    Table ||--o{ TableNeighbor : tableneighbor_b_set
    Table ||--o{ Column : columns
    Table ||--o{ CloudTable : cloud_tables
    Table ||--o{ ObservationLevel : observation_levels
    Table ||--o{ QualityCheck : quality_checks
    Table }o--|| Dataset : dataset
    Table }o--|| Status : status
    Table }o--|| License : license
    Table }o--|| Organization : partner_organization
    Table }o--|| Pipeline : pipeline
    Table }o--|| Account : published_by
    Table }o--|| Account : data_cleaned_by
    Table }o--o{ RawDataSource : raw_data_source
Loading

Lógica de Negócio do Modelo

O modelo Table é um componente central no sistema, representando uma coleção de dados estruturados. Ele está fortemente relacionado a diversos outros modelos, como Coverage, Update, TableNeighbor, Column, CloudTable, ObservationLevel, QualityCheck, Dataset, Status, License, Organization, Pipeline, Account, e RawDataSource.

A lógica de negócio para este modelo inclui a capacidade de manter informações detalhadas sobre a tabela, como descrições multilíngues, URLs para dados brutos e arquivos auxiliares, e metadados como o número de linhas e colunas.

Além disso, a tabela pode ser associada a um dataset específico e pode ser marcada como fechada (is_closed). O campo page_views é usado para rastrear a popularidade da tabela. As relações com outros modelos permitem a integração e a manutenção de dados relacionados, como verificações de qualidade e níveis de observação.

A tabela também suporta a versão e o status, facilitando o gerenciamento de diferentes versões e estados da tabela ao longo do tempo. A relação com Account permite o rastreamento de quem publicou e limpou os dados, indicando a responsabilidade e a origem da manutenção dos dados.

TableNeighbor

O modelo TableNeighbor é utilizado para armazenar informações sobre a similaridade entre duas instâncias do modelo Table. Ele contém campos que registram diferentes tipos de similaridade entre essas instâncias.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id BigAutoField Não Identificador único do registro.
table_a ForeignKey Não Referência para a instância do modelo Table (muitos para um).
table_b ForeignKey Não Referência para outra instância do modelo Table (muitos para um).
similarity FloatField Não Similaridade geral entre table_a e table_b.
similarity_of_area FloatField Não Similaridade baseada na área entre table_a e table_b.
similarity_of_datetime FloatField Não Similaridade baseada na data e hora entre table_a e table_b.
similarity_of_directory FloatField Não Similaridade baseada no diretório entre table_a e table_b.
similarity_of_popularity FloatField Não Similaridade baseada na popularidade entre table_a e table_b.

Diagrama do Modelo

erDiagram
    TableNeighbor {
        BigAutoField id
        FloatField similarity
        FloatField similarity_of_area
        FloatField similarity_of_datetime
        FloatField similarity_of_directory
        FloatField similarity_of_popularity
    }

    Table {}

    TableNeighbor ||--o{ Table : "table_a"
    TableNeighbor ||--o{ Table : "table_b"
Loading

Lógica de Negócio

O modelo TableNeighbor é essencial para determinar a similaridade entre duas instâncias do modelo Table. Isso pode ser útil em várias aplicações, como recomendação de tabelas semelhantes, agrupamento de dados e análise comparativa. Cada campo de similaridade específica (área, data/hora, diretório, popularidade) permite uma análise detalhada e refinada dos diferentes aspectos que podem influenciar na similaridade geral entre as tabelas. Essa granularidade de dados possibilita a criação de algoritmos mais precisos e personalizados para diversas necessidades analíticas e operacionais.

Tag

O modelo Tag é utilizado para categorizar e organizar outros elementos no sistema, como análises e conjuntos de dados, através de relações muitos-para-muitos.

Campos do Modelo

Nome do Campo Tipo (SQL) Nulo Valor Padrão Descrição
id UUID Não Identificador único universal (UUID) do tag.
slug VARCHAR Não Identificador curto e único para URLs amigáveis.
name VARCHAR(255) Não Nome da tag.
name_pt VARCHAR(255) Sim NULL Nome da tag em português.
name_en VARCHAR(255) Sim NULL Nome da tag em inglês.
name_es VARCHAR(255) Sim NULL Nome da tag em espanhol.
created_at DATETIME Não CURRENT_TIMESTAMP Data e hora de criação do registro.
updated_at DATETIME Não CURRENT_TIMESTAMP Data e hora da última atualização do registro.

Diagrama do Modelo

erDiagram
    TAG {
        UUID id
        VARCHAR slug
        VARCHAR name
        VARCHAR name_pt
        VARCHAR name_en
        VARCHAR name_es
        DATETIME created_at
        DATETIME updated_at
    }

    ANALYSIS {}
    DATASET {}

    TAG ||--o{ ANALYSIS: analyses
    TAG ||--o{ DATASET: datasets
Loading

Lógica de Negócio

O modelo Tag é fundamental para a categorização e organização de dados no sistema. Cada tag pode estar associada a múltiplas análises e conjuntos de dados, facilitando a busca e filtragem de informações através de palavras-chave específicas. A utilização do campo slug garante URLs amigáveis e únicas para cada tag, enquanto os campos de nome em diferentes idiomas permitem a internacionalização do sistema, proporcionando uma experiência de usuário mais robusta e acessível para falantes de diferentes línguas. A manutenção das datas de criação e atualização possibilita um melhor rastreamento e auditoria das operações realizadas sobre as tags.

Theme

O modelo Theme representa um tema específico que pode ser associado a várias análises e conjuntos de dados. Este modelo é usado para categorizar e organizar dados de maneira significativa.

Campos do Modelo

Nome do Campo Tipo (SQL) Nulo Valor Padrão Descrição
id UUID Não Identificador único do tema.
slug VARCHAR(255) Não Identificador amigável para URLs do tema.
name VARCHAR(255) Não Nome do tema.
name_pt VARCHAR(255) Sim NULL Nome do tema em português.
name_en VARCHAR(255) Sim NULL Nome do tema em inglês.
name_es VARCHAR(255) Sim NULL Nome do tema em espanhol.
created_at TIMESTAMP Não Data e hora de criação do tema.
updated_at TIMESTAMP Não Data e hora da última atualização do tema.

Diagrama do Modelo

erDiagram
    Theme {
        UUID id
        VARCHAR slug
        VARCHAR name
        VARCHAR name_pt
        VARCHAR name_en
        VARCHAR name_es
        TIMESTAMP created_at
        TIMESTAMP updated_at
    }

    Analysis {}
    Dataset {}

    Theme }o--o{ Analysis : "analyses"
    Theme }o--o{ Dataset : "datasets"
Loading

Lógica de Negócio

O modelo Theme é essencial para a categorização e organização de análises e conjuntos de dados em uma aplicação. Cada tema pode estar associado a múltiplas análises e múltiplos conjuntos de dados, permitindo uma estrutura flexível e escalável. A utilização de campos de nome em diferentes idiomas (português, inglês e espanhol) facilita a internacionalização e o acesso a usuários de diferentes regiões. Os campos de data e hora de criação e atualização auxiliam no rastreamento e gerenciamento das informações ao longo do tempo.

Token

Modelo que representa os tokens utilizados para autenticação ou outras finalidades relacionadas a usuários, domínios e acessos.

Campos do Modelo

Nome do Campo Tipo (SQL) É Nulo Valor Padrão Descrição
accesses ForeignKey Sim N/A Chave estrangeira relacionada ao modelo Access com uma relação de um para muitos.
id BigAutoField Não N/A Identificador único do token.
user ForeignKey Não N/A Chave estrangeira relacionada ao modelo Account com uma relação de muitos para um.
domain ForeignKey Não N/A Chave estrangeira relacionada ao modelo Domain com uma relação de muitos para um.
token CharField(255) Não N/A String que armazena o valor do token.
created_at DateTimeField Não N/A Data e hora de criação do token.
is_active BooleanField Não True Indica se o token está ativo.
expiry_date DateTimeField Sim N/A Data e hora de expiração do token.

Diagrama do Modelo

erDiagram
    Token {
        BigAutoField id
        CharField token
        BooleanField is_active
        DateTimeField created_at
        DateTimeField expiry_date
        ForeignKey domain
        ForeignKey user
    }
        
    Access {}
    Account {}
    Domain {}

    Token ||--o{ Access : accesses
    Token }o--|| Account : user
    Token }o--|| Domain : domain
Loading

Lógica de Negócio

O modelo Token é essencial para gerenciar a autenticação e autorização de usuários em diferentes domínios. Cada token é associado a um usuário específico (user) e a um domínio específico (domain), garantindo que as permissões e acessos sejam corretamente delimitados. Tokens podem ser ativados ou desativados (is_active) e têm uma data de criação (created_at) e, opcionalmente, uma data de expiração (expiry_date). A relação com o modelo Access permite rastrear e gerenciar os acessos feitos utilizando cada token, possibilitando uma auditoria e controle mais granular sobre as operações realizadas no sistema.

Update

O modelo Update é responsável por armazenar informações sobre atualizações de entidades. Ele contém campos para identificar a entidade, a frequência da atualização, possíveis atrasos e metadados adicionais.

Campos do Modelo

Nome do Campo Tipo Nulo Valor Padrão Descrição
id UUIDField Não - Identificador único da atualização.
entity ForeignKey Não - Referência à entidade relacionada (Entity).
frequency IntegerField Não - Frequência da atualização, em dias.
lag IntegerField Sim NULL Atraso na atualização, em dias.
latest DateTimeField Sim NULL Data e hora da última atualização.
table ForeignKey Sim NULL Referência à tabela relacionada (Table).
raw_data_source ForeignKey Sim NULL Referência à fonte de dados bruta relacionada (RawDataSource).
information_request ForeignKey Sim NULL Referência ao pedido de informação relacionado (InformationRequest).

Diagrama do Modelo

erDiagram
    Update {
        UUID id
        UUID entity_id
        INTEGER frequency
        INTEGER lag
        DATETIME latest
        UUID table_id
        UUID raw_data_source_id
        UUID information_request_id
    }

    Entity {}
    Table {}
    RawDataSource {}
    InformationRequest {}

    Update }o--|| Entity: entity_id
    Update }o--|| Table: table_id
    Update }o--|| RawDataSource: raw_data_source_id
    Update }o--|| InformationRequest: information_request_id
Loading

Lógica de Negócio

O modelo Update é essencial para rastrear a frequência e a pontualidade das atualizações para entidades específicas. A lógica de negócio pode envolver o uso do campo frequency para determinar quando uma nova atualização é necessária. O campo lag pode ser utilizado para monitorar e gerenciar atrasos nas atualizações. As referências a outros modelos (Entity, Table, RawDataSource, InformationRequest) permitem uma integração abrangente com outras partes do sistema, facilitando a busca e o gerenciamento das atualizações de dados de maneira eficiente e estruturada.

Clone this wiki locally