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 tabelausers armazena informações sobre todos os usuários do sistema, incluindo alunos e personal trainers.
Personal_Student
A tabelapersonal_student estabelece o relacionamento entre personal trainers e seus alunos.
Exercise
A tabelaexercise armazena informações sobre exercícios físicos.
Training
A tabelatraining armazena informações sobre treinos.
Workout_Plan
A tabelaworkout_plan estabelece a relação entre treinos e exercícios, incluindo detalhes como séries, repetições e peso.
Training_Plan
A tabelatraining_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: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