Documentação do Banco de dados
Banco de Dados PostgreSQL 12 e ORM Sequelize
Neste projeto, utilizamos o PostgreSQL 12 como nosso sistema de gerenciamento de banco de dados. O PostgreSQL é um sistema de banco de dados relacional de código aberto altamente confiável e poderoso, que oferece suporte a uma variedade de recursos avançados, como transações, indexação eficiente e consultas complexas.
PostgreSQL 12
- Desempenho: O PostgreSQL é conhecido por seu desempenho excepcional, especialmente quando se trata de consultas complexas e grandes conjuntos de dados.
- Confiabilidade: É altamente confiável, com suporte a transações ACID (Atomicidade, Consistência, Isolamento e Durabilidade) para garantir a integridade dos dados.
- Escalabilidade: O PostgreSQL é escalável e pode lidar com cargas de trabalho crescentes à medida que o projeto se expande.
Sequelize
Para facilitar a comunicação com o banco de dados PostgreSQL 12 em nosso projeto Nest.js, utilizamos o ORM (Object-Relational Mapping) Sequelize. O Sequelize é um ORM popular para Node.js que fornece uma maneira fácil e eficaz de interagir com o banco de dados usando JavaScript ou TypeScript.
Principais vantagens do Sequelize:
- Abstração de Banco de Dados: O Sequelize abstrai as complexidades do SQL, permitindo que os desenvolvedores usem código JavaScript/TypeScript para criar, consultar e manipular tabelas de banco de dados.
- Modelos de Dados: Podemos definir modelos de dados em JavaScript/TypeScript que correspondem às tabelas do banco de dados, tornando a manutenção e o desenvolvimento mais simples e organizados.
- Migrações: O Sequelize oferece suporte a migrações de banco de dados, o que facilita a atualização do esquema do banco de dados à medida que o projeto evolui.
Modelagem
FigJam:
O FigJam é uma ferramenta de design colaborativo online, que oferece um espaço virtual para equipes criarem e compartilharem ideias visualmente. Aqui estão algumas vantagens de usar o FigJam para a modelagem do banco de dados:
-
Colaboração em tempo real: Membros da equipe podem trabalhar juntos simultaneamente, o que é excelente para brainstorming e contribuições instantâneas, sem a necessidade de estar fisicamente no mesmo local.
-
Facilidade de uso: Com uma interface de usuário intuitiva e recursos de arrastar e soltar, FigJam é acessível para pessoas com diferentes níveis de habilidade técnica, o que é útil em equipes multidisciplinares.
-
Templates e Shapes pré-definidos: FigJam oferece uma série de templates e formas que podem ser usados para criar diagramas de banco de dados, economizando tempo e esforço na criação de elementos comuns.
-
Comentários e Feedbacks: A equipe pode deixar comentários diretamente no diagrama, facilitando a comunicação e a iteração sobre o modelo do banco de dados.
-
Versionamento e Histórico: Permite acompanhar as alterações feitas ao longo do tempo, o que é útil para entender a evolução do projeto e recuperar informações de versões anteriores, se necessário.
Modelagem do banco (Sprint 1)
Este diagrama é a versão inicial do banco de dados, representando a estrutura fundamental sobre a qual o sistema de gerenciamento de usuários, comunidades e eventos estava sendo construído. À medida que o projeto evolui, é comum que ajustes sejam feitos para refinar a estrutura, adicionar novos recursos ou otimizar o desempenho.
Conforme o desenvolvimento prossegue, podem ser feitas alterações como:
-
Adicionar novas tabelas: Por exemplo, se você decidir que os eventos devem ter subcategorias, uma nova tabela de "Subcategorias" poderia ser adicionada.
-
Modificar tabelas existentes: Você pode precisar de mais informações sobre os usuários, então novos campos podem ser adicionados à tabela "Usuário".
-
Refinar relacionamentos: Talvez você perceba que a relação entre usuários e comunidades é mais complexa e precise de uma nova tabela intermediária para melhor descrever essas conexões.
-
Otimização para desempenho: À medida que mais dados são adicionados, algumas estruturas podem ser alteradas para tornar as consultas mais rápidas.
O processo de desenvolvimento e aprimoramento é iterativo e contínuo, garantindo que o banco de dados atenda às necessidades do sistema e proporcione uma experiência suave e eficiente para os usuários finais.
Imagem da modelagem:
Breve explicação da modelagem:
-
Usuário (User): Cada usuário tem informações como nome, e-mail, senha e uma associação a uma comunidade. Imagine isso como o perfil de uma pessoa em um site.
-
Comunidade (Community): Este é uma categoria que os usuários devem fazer parte de pelo menos 1. Por exemplo, uma comunidade pode ser a PUCRS.
-
Eventos (Events): São atividades ou encontros que são criados no sistema. Cada evento tem um título, descrição, data, endereço, local, uma URL para uma foto e uma referência a quem criou o evento.
-
Eventos Pagos (PaidEvents): Alguns eventos podem ter um custo associado. Esta parte do banco de dados guarda informações sobre o preço desses eventos pagos.
-
Tags (Tags): São rótulos ou palavras-chave que podem ser usados para descrever ou categorizar usuários e eventos. Por exemplo, uma tag pode ser "esporte" ou "música".
-
Associação de Usuários e Eventos (UserEvent): Indica quais usuários estão relacionados a quais eventos. Isso é usado, por exemplo, para saber quem se inscreveu em um determinado evento.
-
Associação de Usuários e Tags (UserTags): Mostra quais tags estão associadas a quais usuários. Isso pode ajudar a identificar interesses dos usuários.
-
Associação de Eventos e Tags (EventTags): Da mesma forma, isso mostra quais tags estão associadas a quais eventos.
Modelagem do banco (Sprint 2 e adiante)
Na segunda versão do diagrama, é evidente que o sistema foi expandido e agora inclui uma variedade maior de informações e relações entre elas. Comparando com a versão anterior, aqui estão alguns pontos-chave que foram adicionados ou modificados:
Imagem da modelagem:
-
Postagens e Comentários (Posts and Comments): Foram introduzidas tabelas para gerenciar postagens e comentários, permitindo que os usuários criem conteúdo e interajam entre si.
-
Curtidas (Likes): Agora é possível registrar curtidas em postagens, adicionando uma camada de interação social.
-
Grupos (Groups): Este é uma categoria que os usuários podem fazer parte de acordo com sua vontade. Por exemplo, um grupo pode ser para jogar Tênis.
-
Link para entrar em Grupos (GroupLink): Introduzida uma nova tabela para o compartilhamento de link dos grupos, haverá um limite de usos para cada link.
-
Solicitações de Grupo (GroupRequest): Há uma nova tabela para gerenciar solicitações de adesão a grupos, permitindo um controle sobre quem pode se juntar.
-
Associação de Grupo e Usuário (GroupUser): Esta tabela parece gerenciar a associação de usuários a grupos, com informações sobre quando eles se juntaram.
-
Relações entre Usuários e Eventos (UserEvent): Similar à associação de usuários e eventos da primeira versão, mas agora diretamente conectada à tabela de eventos.
-
Tags para Grupos (TagGroups): Uma nova tabela para associar tags a grupos foi adicionada, permitindo categorizar grupos da mesma maneira que usuários e eventos.
-
Usuário e Comunidade (UserCommunity): Esta nova associação sugere que os usuários podem pertencer a múltiplas comunidades.