Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • W wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Comunidade Universitaria
  • wiki
  • Wiki
  • banco_dados

Last edited by Filipe Oliveira Nov 26, 2023
Page history

banco_dados

Home

Escopo e Cronograma

Processo

Design/Mockups

Configuração

Arquitetura

Código

BD

Dívidas Técnicas

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

image

  • 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

image

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:

Figjam-logo

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:

image

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:

image

  • 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.

Link para o banco de dados

Modelagem Conceitual do banco

⚠ Esta não é uma modelagem conceitual canônica.

conceptual_model

Link para o arquivo Draw.io

Clone repository
  • arquitetura
  • banco_dados
  • codigo
  • configuracao
  • design_mockups
  • dividas_tecnicas
  • escopo
  • Home
  • processo