Documentação do Negócio
Documentação Técnica
Visão Geral
O banco de dados foi projetado para gerenciar assinaturas de datasets e data products, garantindo rastreabilidade de transações e faturamento. Ele segue um modelo relacional estruturado para garantir consistência e escalabilidade.\
Diagrama
Estrutura do Banco de Dados
🔧 ORM Utilizado: SQLAlchemy
Neste projeto, utilizamos o SQLAlchemy como ORM (Object Relational Mapper) para facilitar a interação entre a aplicação e o banco de dados relacional, permitindo manipular dados do banco como objetos Python, reduzindo o uso de SQL cru.
🔧 Estruturas das tabelas
O banco é composto pelas seguintes tabelas principais:
User
Descrição
Armazena as informações dos usuários do sistema. Cada usuário está associado a uma conta (account
) e possui um papel definido (user_role
), permitindo controle de permissões e escopo.
Estrutura da Tabela
Coluna | Tipo | Chave | Restrições | Descrição |
---|---|---|---|---|
id |
String |
Primária | Gerado via UUID
|
Identificador único do usuário. |
account_id |
String |
Estrangeira | ForeignKey(account.id) |
Referência à conta à qual o usuário pertence. |
role_id |
Integer |
Estrangeira |
ForeignKey(user_role.id) , NOT NULL
|
Papel (role) do usuário dentro da conta. |
name |
String |
— | NOT NULL |
Nome completo do usuário. |
email |
String |
— |
UNIQUE , NOT NULL
|
Email do usuário, utilizado para login e contato. |
externalToken |
String |
— |
UNIQUE , NULLABLE
|
Token externo de autenticação, se aplicável. |
is_active |
Boolean |
— | DEFAULT True |
Indica se o usuário está ativo no sistema. |
created_at |
TIMESTAMP |
— | NOT NULL |
Data de criação do registro. |
updated_at |
TIMESTAMP |
— | NOT NULL |
Data da última atualização do registro. |
Relacionamentos
-
account
: relacionamento com a tabelaaccount
, representando a conta do usuário. -
role_id
: relacionamento com a tabelauser_role
, indicando o tipo de permissão do usuário.
UserDetails
Ela é usada para armazenar informações adicionais do usuário, separadamente da tabela principal de user. Isso é útil para manter a separação de responsabilidades entre as tabelas.
UserRole
Define os papéis que um usuário pode ter dentro do sistema, como administrador ou assinante.
Account
Representa uma entidade (empresa ou organização) que assina datasets e realiza transações.
AccountRole
Define os diferentes tipos de papéis que uma conta pode ter dentro da plataforma.
Subscription
Registra as assinaturas de datasets feitas pelas contas, incluindo informações sobre período e status.
Transaction
Armazena informações sobre transações financeiras realizadas dentro do sistema, vinculadas a uma conta e a um usuário responsável.
TransactionDetail
Detalha os itens dentro de uma transação, associando datasets e produtos de dados adquiridos.
Invoice
Registra os valores faturados das transações, garantindo rastreabilidade contábil.
Dataset
Representa um dataset disponível para assinatura, contendo metadados como origem, preço e categoria.
DataSource
Define a fonte de onde os datasets são obtidos, associando-os a provedores de dados.
DataProvider
Representa uma entidade que fornece datasets para a plataforma.
DataProduct
Define um conjunto de datasets agrupados em um produto de dados que pode ser adquirido como uma unidade.
DataProductItem
Relaciona datasets individuais a um data product, permitindo composição flexível de pacotes de dados.
Regras de Integridade e Constraints
- Todas as chaves primárias são UUIDs para garantir unicidade.
- As relações entre tabelas são definidas por chaves estrangeiras (FK) para garantir a integridade referencial.
- O campo
is_active
é utilizado para marcar registros ativos e inativos, evitando exclusão física de dados. - O faturamento é baseado em transações e invoices, garantindo rastreabilidade e conformidade com práticas contábeis.
Considerações Finais
O banco de dados foi estruturado para garantir flexibilidade e escalabilidade. Alteracoes futuras podem incluir:
- Auditoria de logs para rastrear ações de usuários.
- Indexação para otimização de buscas.
- Expansão do modelo de faturamento para planos diferenciados.