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.
Motivos para Escolher o 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 como ORM
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 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.
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 é um grupo ou categoria que os usuários podem fazer parte. Por exemplo, uma comunidade pode ser um clube de leitura ou um grupo de corrida.
-
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 etiqueta 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)
A partir da Sprint 2, algumas relações foram atualizadas e foram adicionadas as tabelas para a implementação de feature de Grupos para a aplicação e esse foi o modelo utilizado: