Sumário
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:
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.
- Relaciona-se com a tabela iniciativas através dos campos:
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).
- Está vinculada à tabela iniciativas por meio do campo
3. Tabela iniciativas
-
Relacionamentos principais:
-
Com
organizadores:- Cada iniciativa tem um organizador responsável, definido pelo campo
organizador_id.
- Cada iniciativa tem um organizador responsável, definido pelo campo
-
Com
usuarios:- Relaciona-se aos usuários através dos campos de auditoria:
-
criado_por,editado_por,deletado_por.
-
- Relaciona-se aos usuários através dos campos de auditoria:
-
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.
- Relacionamento muitos para muitos (N:N) através da tabela intermediária
-
Com
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.
- Relaciona-se diretamente com a tabela iniciativas através do campo
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).
- Conectada à tabela iniciativas através da tabela intermediária
6. Tabela iniciativa_tag (tabela intermediária)
-
Função:
- Faz a ligação entre
iniciativasetags.
- Faz a ligação entre
-
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
- 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.