... | ... | @@ -19,7 +19,7 @@ O banco de dados foi projetado para gerenciar assinaturas de datasets e data pro |
|
|

|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## Infraestrutura
|
... | ... | @@ -28,7 +28,6 @@ O banco de dados foi projetado para gerenciar assinaturas de datasets e data pro |
|
|
- A estrutura foi pensada para alta disponibilidade, escalabilidade e segurança de dados.
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
## Estrutura do Banco de Dados
|
... | ... | @@ -44,8 +43,9 @@ O banco de dados foi projetado para gerenciar assinaturas de datasets e data pro |
|
|
### 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
|
|
|
#### Estruturas das tabelas
|
|
|
O banco é composto pelas seguintes tabelas principais:
|
|
|
|
|
|
### **User**
|
... | ... | @@ -71,11 +71,15 @@ Armazena as informações dos usuários do sistema. Cada usuário está associad |
|
|
- `account`: relacionamento com a tabela `account`, representando a conta do usuário.
|
|
|
- `role_id`: relacionamento com a tabela `user_role`, indicando o tipo de permissão do usuário.
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
### **UserDetails**
|
|
|
### Descrição
|
|
|
#### Descrição
|
|
|
Contém informações adicionais de perfil associadas a um usuário. Essa tabela estende os dados da tabela `user`, armazenando informações complementares como a imagem de perfil.
|
|
|
|
|
|
### Estrutura da Tabela
|
|
|
#### Estrutura da Tabela
|
|
|
|
|
|
| Coluna | Tipo | Chave | Restrições | Descrição |
|
|
|
|----------------|------------|---------------|-----------------------------------|----------------------------------------------------------|
|
... | ... | @@ -83,7 +87,7 @@ Contém informações adicionais de perfil associadas a um usuário. Essa tabela |
|
|
| `user_id` | `String` | Estrangeira | `ForeignKey(user.id)` | Referência ao usuário ao qual os detalhes pertencem. |
|
|
|
| `profile_pic` | `String` | — | `NOT NULL` | URL ou caminho da imagem de perfil do usuário. |
|
|
|
|
|
|
### Relacionamentos
|
|
|
#### Relacionamentos
|
|
|
#### Foreign Keys
|
|
|
- `user_id`: relacionamento com a tabela `user`, definindo a quem pertencem os dados complementares.
|
|
|
|
... | ... | @@ -92,22 +96,22 @@ Contém informações adicionais de perfil associadas a um usuário. Essa tabela |
|
|
|
|
|
|
|
|
### **UserRole**
|
|
|
### Descrição
|
|
|
#### Descrição
|
|
|
Define os diferentes papéis (*roles*) que um usuário pode assumir dentro do sistema. Essa tabela é usada para controle de permissões e escopo de funcionalidades.
|
|
|
|
|
|
### Estrutura da Tabela
|
|
|
#### Estrutura da Tabela
|
|
|
|
|
|
| Coluna | Tipo | Chave | Restrições | Descrição |
|
|
|
|--------------|-----------|-----------|---------------------|--------------------------------------------|
|
|
|
| `id` | `Integer` | Primária | `INDEX` | Identificador único do papel. |
|
|
|
| `role_name` | `String` | — | `NOT NULL` | Nome do papel atribuído ao usuário. |
|
|
|
|
|
|
### Valores Padrão (ENUM)
|
|
|
#### Valores Padrão (ENUM)
|
|
|
|
|
|
- `ROLE_NORMAL`: Representa o papel de um usuário comum.
|
|
|
- `ROLE_ADMIN`: Representa o papel de um usuário com permissões administrativas.
|
|
|
|
|
|
### Relacionamentos
|
|
|
#### Relacionamentos
|
|
|
|
|
|
- Essa tabela é referenciada pela tabela `user`, utilizando o atributo `user.role_id` para associar cada usuário ao seu respectivo papel.
|
|
|
|
... | ... | @@ -116,10 +120,10 @@ Define os diferentes papéis (*roles*) que um usuário pode assumir dentro do si |
|
|
|
|
|
|
|
|
### **Account**
|
|
|
### Descrição
|
|
|
#### Descrição
|
|
|
Armazena os dados das contas principais do sistema, que podem representar uma empresa, organização ou grupo ao qual os usuários estão vinculados. Cada conta possui um papel definido na tabela `account_role` e pode possuir múltiplas transações e assinaturas.
|
|
|
|
|
|
### Estrutura da Tabela
|
|
|
#### Estrutura da Tabela
|
|
|
|
|
|
| Coluna | Tipo | Chave | Restrições | Descrição |
|
|
|
|---------------|-------------|------------|--------------------------------------------|-----------------------------------------------------------|
|
... | ... | @@ -130,7 +134,7 @@ Armazena os dados das contas principais do sistema, que podem representar uma em |
|
|
| `created_at` | `TIMESTAMP` | — | `NOT NULL` | Data de criação do registro da conta. |
|
|
|
| `updated_at` | `TIMESTAMP` | — | `NOT NULL` | Data da última atualização do registro. |
|
|
|
|
|
|
### Relacionamentos
|
|
|
#### Relacionamentos
|
|
|
#### Foreign Keys
|
|
|
- `role_id`: relacionamento com a tabela `account_role`, indicando o tipo da conta.
|
|
|
|
... | ... | @@ -143,22 +147,22 @@ Armazena os dados das contas principais do sistema, que podem representar uma em |
|
|
|
|
|
|
|
|
### **AccountRole**
|
|
|
### Descrição
|
|
|
#### Descrição
|
|
|
Define os diferentes papéis que uma conta pode ter no sistema. Esses papéis são utilizados para controlar permissões, funcionalidades disponíveis e o nível de acesso de cada conta (ex: contas comuns ou administrativas).
|
|
|
|
|
|
### Estrutura da Tabela
|
|
|
#### Estrutura da Tabela
|
|
|
|
|
|
| Coluna | Tipo | Chave | Restrições | Descrição |
|
|
|
|--------------|-----------|-----------|---------------------|--------------------------------------------------|
|
|
|
| `id` | `Integer` | Primária | `INDEX` | Identificador único do papel de conta. |
|
|
|
| `role_name` | `String` | — | `NOT NULL` | Nome descritivo do papel atribuído à conta. |
|
|
|
|
|
|
### Valores Padrão (Constantes Definidas no Código)
|
|
|
#### Valores Padrão (Constantes Definidas no Código)
|
|
|
|
|
|
- `ROLE_NORMAL`: Representa uma conta comum, com permissões básicas.
|
|
|
- `ROLE_ADMIN`: Representa uma conta com permissões administrativas ampliadas.
|
|
|
|
|
|
### Relacionamentos
|
|
|
#### Relacionamentos
|
|
|
|
|
|
- Essa tabela é referenciada por `account.role_id` para definir o papel da conta no sistema.
|
|
|
|
... | ... | @@ -167,10 +171,10 @@ Define os diferentes papéis que uma conta pode ter no sistema. Esses papéis s |
|
|
|
|
|
|
|
|
### **Subscription**
|
|
|
### Descrição
|
|
|
#### Descrição
|
|
|
Registra as assinaturas de produtos de dados feitas por contas do sistema. Cada assinatura está vinculada a uma conta e a um produto específico, com informações de data de início, término e status de atividade.
|
|
|
|
|
|
### Estrutura da Tabela
|
|
|
#### Estrutura da Tabela
|
|
|
|
|
|
| Coluna | Tipo | Chave | Restrições | Descrição |
|
|
|
|------------------|-------------|------------|---------------------------------------------------|----------------------------------------------------------------|
|
... | ... | @@ -183,7 +187,7 @@ Registra as assinaturas de produtos de dados feitas por contas do sistema. Cada |
|
|
| `created_at` | `DateTime` | — | `DEFAULT func.now()`, `NOT NULL` | Timestamp da criação da assinatura. |
|
|
|
| `updated_at` | `DateTime` | — | `DEFAULT func.now()`, atualizado com `onupdate` | Timestamp da última modificação. |
|
|
|
|
|
|
### Relacionamentos
|
|
|
#### Relacionamentos
|
|
|
#### Foreign Keys
|
|
|
- `account_id`: relacionamento com "account", utilizando o atributo `account.id` para associar uma subscription a uma conta.
|
|
|
|
... | ... | @@ -196,10 +200,10 @@ Registra as assinaturas de produtos de dados feitas por contas do sistema. Cada |
|
|
|
|
|
|
|
|
### **Transaction**
|
|
|
### Descrição
|
|
|
#### Descrição
|
|
|
Armazena os detalhes de cada transação realizada por uma conta, vinculando produtos de dados adquiridos ou acessados e, opcionalmente, a assinatura usada no processo. Essa tabela detalha o que foi efetivamente movimentado em uma transação.
|
|
|
|
|
|
### Estrutura da Tabela
|
|
|
#### Estrutura da Tabela
|
|
|
|
|
|
| Coluna | Tipo | Chave | Restrições | Descrição |
|
|
|
|------------------|-------------|------------|---------------------------------------------------|----------------------------------------------------------------|
|
... | ... | @@ -210,7 +214,7 @@ Armazena os detalhes de cada transação realizada por uma conta, vinculando pro |
|
|
| `created_at` | `DateTime` | — | `DEFAULT func.now()`, `NOT NULL` | Data e hora da criação do registro. |
|
|
|
| `updated_at` | `DateTime` | — | `DEFAULT func.now()`, atualizado com `onupdate` | Data e hora da última atualização do registro. |
|
|
|
|
|
|
### Relacionamentos
|
|
|
#### Relacionamentos
|
|
|
#### Foreign Keys
|
|
|
- `account_id`: relacionamento com a tabela `account`, utilizando o atributo `account.id` para associar uma transação á uma conta.
|
|
|
|
... | ... | @@ -224,10 +228,10 @@ Armazena os detalhes de cada transação realizada por uma conta, vinculando pro |
|
|
|
|
|
|
|
|
### **TransactionDetail**
|
|
|
### Descrição
|
|
|
#### Descrição
|
|
|
Armazena os detalhes de cada transação realizada por uma conta, vinculando produtos de dados adquiridos ou acessados e, opcionalmente, a assinatura usada no processo. Essa tabela detalha o que foi efetivamente movimentado em uma transação.
|
|
|
|
|
|
### Estrutura da Tabela
|
|
|
#### Estrutura da Tabela
|
|
|
|
|
|
| Coluna | Tipo | Chave | Restrições | Descrição |
|
|
|
|------------------|-------------|------------|---------------------------------------------------|----------------------------------------------------------------|
|
... | ... | @@ -238,7 +242,7 @@ Armazena os detalhes de cada transação realizada por uma conta, vinculando pro |
|
|
| `created_at` | `DateTime` | — | `DEFAULT func.now()`, `NOT NULL` | Data e hora da criação do registro. |
|
|
|
| `updated_at` | `DateTime` | — | `DEFAULT func.now()`, atualizado com `onupdate` | Data e hora da última atualização do registro. |
|
|
|
|
|
|
### Relacionamentos
|
|
|
#### Relacionamentos
|
|
|
#### Foreign Keys
|
|
|
- `transaction_id`: relacionamento com a tabela `transaction`, utilizando o atributo `transaction.id` para associar uma transaction com transaction_detail.
|
|
|
- `data_product_id`: relacionamento com a tabela `data_product`, utilizando o atributo `data_product.id` para associar um data_product a tabela transaction_detail.
|
... | ... | @@ -253,7 +257,7 @@ Armazena os detalhes de cada transação realizada por uma conta, vinculando pro |
|
|
|
|
|
|
|
|
### **Invoice**
|
|
|
### Descrição
|
|
|
#### Descrição
|
|
|
Armazena as faturas geradas para cada transação. Cada fatura está vinculada a uma transação específica e contém o valor total cobrado, além dos timestamps de criação e atualização.
|
|
|
|
|
|
### Estrutura da Tabela
|
... | ... | @@ -266,7 +270,7 @@ Armazena as faturas geradas para cada transação. Cada fatura está vinculada a |
|
|
| `created_at` | `DateTime` | — | `NOT NULL` | Data e hora de criação da fatura. |
|
|
|
| `updated_at` | `DateTime` | — | `NOT NULL` | Data e hora da última atualização da fatura. |
|
|
|
|
|
|
### Relacionamentos
|
|
|
#### Relacionamentos
|
|
|
#### Foreign Keys
|
|
|
- `transaction_id`: relacionamento com a tabela `transaction`, utilizando o atributo `transaction.id` para associar uma `transaction` a tabela `invoice`.
|
|
|
|
... | ... | @@ -278,10 +282,10 @@ Armazena as faturas geradas para cada transação. Cada fatura está vinculada a |
|
|
|
|
|
|
|
|
### **Dataclient**
|
|
|
### Descrição
|
|
|
#### Descrição
|
|
|
Armazena os dados dos clientes consumidores de produtos ou serviços de dados. Cada cliente está vinculado a uma conta no sistema e possui um código identificador único utilizado em processos de autenticação ou auditoria.
|
|
|
|
|
|
### Estrutura da Tabela
|
|
|
#### Estrutura da Tabela
|
|
|
|
|
|
| Coluna | Tipo | Chave | Restrições | Descrição |
|
|
|
|-------------------|----------|------------|--------------------------------------------|------------------------------------------------------------------|
|
... | ... | @@ -297,10 +301,10 @@ Armazena os dados dos clientes consumidores de produtos ou serviços de dados. C |
|
|
|
|
|
|
|
|
### **Dataset**
|
|
|
### Descrição
|
|
|
#### Descrição
|
|
|
Armazena os conjuntos de dados fornecidos por diferentes provedores. Cada dataset pertence a um provedor de dados e está vinculado diretamente a um único produto de dados publicado no sistema.
|
|
|
|
|
|
### Estrutura da Tabela
|
|
|
#### Estrutura da Tabela
|
|
|
|
|
|
| Coluna | Tipo | Chave | Restrições | Descrição |
|
|
|
|------------------|-----------|------------|----------------------------------------|--------------------------------------------------------------|
|
... | ... | @@ -311,7 +315,7 @@ Armazena os conjuntos de dados fornecidos por diferentes provedores. Cada datase |
|
|
| `created_at` | `TIMESTAMP`| — | `NOT NULL` | Data de criação do registro. |
|
|
|
| `updated_at` | `TIMESTAMP`| — | `NOT NULL` | Data da última atualização do registro. |
|
|
|
|
|
|
### Relacionamentos
|
|
|
#### Relacionamentos
|
|
|
#### Foreign Keys
|
|
|
- `data_provider_id`: relacionamento com a tabela `data_provider`, utilizando o atributo `data_provider.id` para associar um `dataset` a tabela `data_provider`.
|
|
|
|
... | ... | @@ -323,10 +327,10 @@ Armazena os conjuntos de dados fornecidos por diferentes provedores. Cada datase |
|
|
|
|
|
|
|
|
### **DataSource**
|
|
|
### Descrição
|
|
|
#### Descrição
|
|
|
Representa as fontes físicas ou virtuais de onde os dados são originados por um provedor de dados. Cada fonte contém informações de localização geográfica e está vinculada a um provedor.
|
|
|
|
|
|
### Estrutura da Tabela
|
|
|
#### Estrutura da Tabela
|
|
|
|
|
|
| Coluna | Tipo | Chave | Restrições | Descrição |
|
|
|
|-------------------|-----------|---------------|----------------------------------|-----------------------------------------------------------------|
|
... | ... | @@ -344,10 +348,10 @@ Representa as fontes físicas ou virtuais de onde os dados são originados por u |
|
|
|
|
|
|
|
|
### **DataProvider**
|
|
|
### Descrição
|
|
|
#### Descrição
|
|
|
Armazena os provedores de dados responsáveis por publicar e manter datasets na plataforma. Cada provedor está vinculado a uma conta do sistema e pode ter múltiplas fontes de dados (data sources) e datasets associados.
|
|
|
|
|
|
### Estrutura da Tabela
|
|
|
#### Estrutura da Tabela
|
|
|
|
|
|
| Coluna | Tipo | Chave | Restrições | Descrição |
|
|
|
|--------------|----------|------------|-------------------------------------|--------------------------------------------------------------------|
|
... | ... | @@ -362,10 +366,10 @@ Armazena os provedores de dados responsáveis por publicar e manter datasets na |
|
|
|
|
|
|
|
|
### **DataProduct**
|
|
|
### Descrição
|
|
|
#### Descrição
|
|
|
Armazena os produtos de dados disponíveis na plataforma, os quais são baseados em datasets fornecidos por provedores. Cada produto contém informações detalhadas como localização, descrição, preço e está vinculado a um dataset.
|
|
|
|
|
|
### Estrutura da Tabela
|
|
|
#### Estrutura da Tabela
|
|
|
|
|
|
| Coluna | Tipo | Chave | Restrições | Descrição |
|
|
|
|---------------|-----------|------------|---------------------------------------|------------------------------------------------------------------------|
|
... | ... | @@ -379,7 +383,7 @@ Armazena os produtos de dados disponíveis na plataforma, os quais são baseados |
|
|
| `created_at` | `TIMESTAMP`| — | `NOT NULL` | Data de criação do registro. |
|
|
|
| `updated_at` | `TIMESTAMP`| — | `NOT NULL` | Data da última atualização do registro. |
|
|
|
|
|
|
### Relacionamentos
|
|
|
#### Relacionamentos
|
|
|
#### Foreign Keys
|
|
|
- `dataset_id`: relacionamento com a tabela `dataset`, utilizando o atributo `dataset.id` para associar um `data_product` a tabela `dataset`.
|
|
|
|
... | ... | @@ -391,10 +395,10 @@ Armazena os produtos de dados disponíveis na plataforma, os quais são baseados |
|
|
|
|
|
|
|
|
### **DataProductItem**
|
|
|
### Descrição
|
|
|
#### Descrição
|
|
|
Relaciona um produto de dados a múltiplos datasets, permitindo que um único `data_product` seja composto por diversos `dataset`s. Serve como uma tabela de associação (join table) entre `data_product` e `dataset`.
|
|
|
|
|
|
### Estrutura da Tabela
|
|
|
#### Estrutura da Tabela
|
|
|
|
|
|
| Coluna | Tipo | Chave | Restrições | Descrição |
|
|
|
|------------------|------------|------------|-----------------------------------------|----------------------------------------------------------------------------|
|
... | ... | @@ -404,13 +408,12 @@ Relaciona um produto de dados a múltiplos datasets, permitindo que um único `d |
|
|
| `created_at` | `TIMESTAMP`| — | `NOT NULL` | Data de criação do registro. |
|
|
|
| `updated_at` | `TIMESTAMP`| — | `NOT NULL` | Data da última atualização do registro. |
|
|
|
|
|
|
### Relacionamentos
|
|
|
#### Relacionamentos
|
|
|
#### Foreign Keys
|
|
|
- `dataset_product_id`: relacionamento com a tabela `dataset_product`, utilizando o atributo `data_set_product.id` para associar um `data_product_item` a tabela `data_set_product`.
|
|
|
- `dataset_id`: relacionamento com a tabela `dataset`, utilizando o atributo `dataset.id` para associar um `data_product_item` a tabela `dataset`.
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
## Regras de Integridade e Constraints
|
... | ... | |