Skip to main content

Banco de Dados

O FitLocus utiliza PostgreSQL como sistema de gerenciamento de banco de dados relacional para armazenar e gerenciar todos os dados da aplicação. Este documento descreve a estrutura do banco de dados, incluindo tabelas, relacionamentos e considerações de design.

Visão Geral

O banco de dados do FitLocus é projetado para suportar as principais funcionalidades da plataforma:
  • Gerenciamento de usuários (alunos e personal trainers)
  • Relacionamento entre personal trainers e alunos
  • Exercícios e categorias
  • Treinos e planos de treino
  • Execução de treinos e exercícios
  • Assinaturas e pagamentos
  • Métricas e recordes pessoais

Modelo de Dados

Principais Tabelas

Users

A tabela users armazena informações sobre todos os usuários do sistema, incluindo alunos e personal trainers.

Personal_Student

A tabela personal_student estabelece o relacionamento entre personal trainers e seus alunos.

Exercise

A tabela exercise armazena informações sobre exercícios físicos.

Training

A tabela training armazena informações sobre treinos.

Workout_Plan

A tabela workout_plan estabelece a relação entre treinos e exercícios, incluindo detalhes como séries, repetições e peso.

Training_Plan

A tabela training_plan armazena informações sobre planos de treino semanais.

Índices

O banco de dados utiliza índices para otimizar consultas frequentes:

Restrições e Integridade Referencial

O banco de dados implementa as seguintes restrições para garantir a integridade dos dados:
  • Chaves Estrangeiras: Todas as referências entre tabelas são implementadas como chaves estrangeiras com ações de cascata apropriadas
  • Restrições de Unicidade: Emails de usuários são únicos
  • Restrições de Não-Nulidade: Campos obrigatórios são marcados como NOT NULL
  • Restrições de Verificação: Validação de valores para campos como subscription_type e user_type

Migrações e Versionamento

O banco de dados é gerenciado através de migrações usando Liquibase:
Cada alteração no esquema do banco de dados é versionada e aplicada sequencialmente, garantindo consistência entre ambientes.

Considerações de Performance

Para garantir a performance do banco de dados, as seguintes estratégias são implementadas:
  • Índices: Índices estratégicos para consultas frequentes
  • Paginação: Todas as consultas que retornam grandes conjuntos de dados implementam paginação
  • Consultas Otimizadas: Uso de JOINs eficientes e subconsultas apenas quando necessário
  • Transações: Uso apropriado de transações para garantir consistência

Segurança de Dados

A segurança dos dados é garantida através de:
  • Criptografia: Senhas armazenadas com hash usando BCrypt
  • Acesso Restrito: Acesso ao banco de dados limitado a serviços autorizados
  • Backup: Backups automáticos diários com retenção de 30 dias
  • Auditoria: Registro de alterações em tabelas sensíveis

Ambiente de Desenvolvimento

Para desenvolvimento local, um contêiner Docker com PostgreSQL é configurado:

Ambiente de Produção

Em produção, o banco de dados é hospedado no Google Cloud SQL:
  • Tipo: PostgreSQL 14
  • Configuração: 2 vCPUs, 8GB RAM
  • Armazenamento: 100GB SSD com expansão automática
  • Backup: Automático diário com retenção de 30 dias
  • Alta Disponibilidade: Configuração com réplica de leitura
  • Monitoramento: Alertas para uso de CPU, memória e espaço em disco