|
|
|
# Sumário
|
|
|
|
|
|
|
|
1. [Banco de Dados](#banco-de-dados)
|
|
|
|
1. [Descrição](#descrição)
|
|
|
|
2. [Banco de dados escolhido (PostgreSQL)](#banco-de-dados-escolhido-postgresql)
|
|
|
|
3. [Diagrama do banco de dados](#diagrama-do-banco-de-dados)
|
|
|
|
4. [Relacionamentos](#relacionamentos)
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
# Banco de Dados
|
|
|
|
|
|
|
|
## Descrição
|
|
|
|
Esta seção visa fornecer uma breve introdução sobre o banco de dados escolhido para armazenar as informações manipuladas pela aplicação desenvolvida, assim como sua configuração e integrações no projeto.
|
|
|
|
|
|
|
|
Optou-se por utilizar o **PostgreSQL** como sistema de gerenciamento de banco de dados (SGBD) devido à sua **escalabilidade**, **confiabilidade** e **suporte avançado a consultas SQL**.
|
|
|
|
|
|
|
|
No projeto, o PostgreSQL é integrado ao **backend desenvolvido em Python**, onde as entidades são manipuladas por meio de **repositórios**, que realizam as operações de leitura, escrita e atualização diretamente no banco. Essa abordagem segue o padrão **ORM (Object Relational Mapping)**, garantindo maior organização e segurança na manipulação dos dados.
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
## Banco de dados escolhido (PostgreSQL)
|
|
|
|
A escolha de um **banco de dados relacional** possibilitou a estruturação das informações em **tabelas relacionadas**, assegurando **integridade referencial** e **consistência nos dados**.
|
|
|
|
|
|
|
|
O PostgreSQL oferece suporte a:
|
|
|
|
- **Transações seguras**, prevenindo inconsistências.
|
|
|
|
- **Chaves primárias e estrangeiras** para definir relacionamentos claros entre entidades.
|
|
|
|
- **Índices** para otimização de consultas complexas.
|
|
|
|
- **Suporte a JSON**, caso seja necessário armazenar dados semiestruturados.
|
|
|
|
|
|
|
|
Essa estrutura atende à necessidade do projeto de **organizar, consultar e manter os dados de forma eficiente**, especialmente em cenários com múltiplos usuários interagindo simultaneamente.
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
## Diagrama do banco de dados
|
|
|
|
|
|
|
|
Abaixo está a representação visual do banco de dados, mostrando as entidades principais e como elas se relacionam:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```markdown
|
|
|
|
![Diagrama do Banco de Dados] 
|
|
|
|
|
|
|
|
## Relacionamentos do Banco de Dados
|
|
|
|
|
|
|
|
Esta seção descreve como as tabelas do banco de dados estão conectadas, detalhando os relacionamentos entre as entidades principais.
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
### **1. Tabela `usuarios`**
|
|
|
|
- **Relacionamentos:**
|
|
|
|
- Relaciona-se com a tabela **iniciativas** através dos campos:
|
|
|
|
- `criado_por` → Identifica o usuário que **criou** a iniciativa.
|
|
|
|
- `editado_por` → Identifica o usuário que **editou** a iniciativa.
|
|
|
|
- `deletado_por` → Identifica o usuário que **deletou** a iniciativa.
|
|
|
|
- **Cardinalidade:**
|
|
|
|
- **Um usuário (0,1)** pode criar, editar ou deletar **muitas iniciativas**.
|
|
|
|
- Uma iniciativa **deve** ter pelo menos um usuário associado como criador.
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
### **2. Tabela `organizadores`**
|
|
|
|
- **Relacionamentos:**
|
|
|
|
- Está vinculada à tabela **iniciativas** por meio do campo `organizador_id`.
|
|
|
|
- Cada iniciativa está vinculada a **um único organizador**.
|
|
|
|
- **Cardinalidade:**
|
|
|
|
- **Um organizador (1)** pode estar relacionado a **muitas iniciativas (N)**.
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
### **3. Tabela `iniciativas`**
|
|
|
|
- **Relacionamentos principais:**
|
|
|
|
- **Com `organizadores`:**
|
|
|
|
- Cada iniciativa tem **um organizador responsável**, definido pelo campo `organizador_id`.
|
|
|
|
- **Com `usuarios`:**
|
|
|
|
- Relaciona-se aos usuários através dos campos de auditoria:
|
|
|
|
- `criado_por`, `editado_por`, `deletado_por`.
|
|
|
|
- **Com `iniciativa_horarios`:**
|
|
|
|
- Uma iniciativa pode ter **vários horários cadastrados**.
|
|
|
|
- Relacionamento 1:N (uma iniciativa para muitos registros de horários).
|
|
|
|
- **Com `tags`:**
|
|
|
|
- Relacionamento **muitos para muitos (N:N)** através da tabela intermediária `iniciativa_tag`.
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
### **4. Tabela `iniciativa_horarios`**
|
|
|
|
- **Relacionamentos:**
|
|
|
|
- Relaciona-se diretamente com a tabela **iniciativas** através do campo `iniciativa_id`.
|
|
|
|
- **Cardinalidade:**
|
|
|
|
- **Uma iniciativa (1)** pode ter **vários horários cadastrados (N)**.
|
|
|
|
- Cada horário pertence a **apenas uma iniciativa**.
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
### **5. Tabela `tags`**
|
|
|
|
- **Relacionamentos:**
|
|
|
|
- Conectada à tabela **iniciativas** através da tabela intermediária `iniciativa_tag`.
|
|
|
|
- **Cardinalidade:**
|
|
|
|
- **Uma tag (1)** pode estar associada a **várias iniciativas (N)**.
|
|
|
|
- **Uma iniciativa (1)** pode conter **várias tags (N)**.
|
|
|
|
- Este é um relacionamento clássico de **muitos para muitos (N:N)**.
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
### **6. Tabela `iniciativa_tag`** *(tabela intermediária)*
|
|
|
|
- **Função:**
|
|
|
|
- Faz a ligação entre `iniciativas` e `tags`.
|
|
|
|
- **Campos principais:**
|
|
|
|
- `iniciativa_id` → Referência para a tabela **iniciativas**.
|
|
|
|
- `tag_id` → Referência para a tabela **tags**.
|
|
|
|
- **Cardinalidade:**
|
|
|
|
- Cada registro associa **uma iniciativa** a **uma tag específica**.
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
### **7. Tabela `contatos`**
|
|
|
|
- **Relacionamentos:**
|
|
|
|
- **Não possui relacionamentos diretos** com outras tabelas no momento.
|
|
|
|
- É usada para armazenar mensagens enviadas pelos usuários, contendo:
|
|
|
|
- Nome
|
|
|
|
- E-mail
|
|
|
|
- Assunto
|
|
|
|
- Mensagem
|
|
|
|
- Data de envio (`enviado_em`)
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
## Resumo em formato de tabela
|
|
|
|
|
|
|
|
| Tabela | Relaciona-se com | Tipo de relacionamento |
|
|
|
|
|-------------------|--------------------------|------------------------|
|
|
|
|
| usuarios | iniciativas | 1:N (auditoria: criado, editado, deletado) |
|
|
|
|
| organizadores | iniciativas | 1:N |
|
|
|
|
| iniciativas | organizadores, usuarios, iniciativa_horarios, iniciativa_tag | Vários (1:N e N:N) |
|
|
|
|
| iniciativa_horarios | iniciativas | 1:N |
|
|
|
|
| tags | iniciativas (via iniciativa_tag) | N:N |
|
|
|
|
| iniciativa_tag | iniciativas, tags | Tabela intermediária |
|
|
|
|
| contatos | - | Isolada (sem relacionamento) |
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
## Representação geral dos relacionamentos
|
|
|
|
|
|
|
|
- **Usuários** gerenciam iniciativas (criando, editando, deletando).
|
|
|
|
- **Organizadores** estão vinculados a iniciativas como responsáveis principais.
|
|
|
|
- **Iniciativas** têm múltiplos horários e podem ser categorizadas por várias **tags**.
|
|
|
|
- **Tags** são gerenciadas através da tabela intermediária `iniciativa_tag`.
|
|
|
|
- **Contatos** servem como um repositório de mensagens enviadas, sem conexões diretas com outras entidades.
|
|
|
|
|