Pular para conteúdo

Banco de Dados

Objetivo

Analisar as opções de banco de dados disponíveis para o projeto e definir a tecnologia mais adequada para a arquitetura escolhida, considerando compatibilidade com o backend em Python + Flask e as necessidades futuras do sistema.

A escolha correta do banco de dados é importante para garantir:

  • organização dos dados
  • desempenho adequado
  • facilidade de manutenção
  • integração com novas funcionalidades
  • escalabilidade futura
  • suporte à futura camada de IA

O que é um banco de dados

Um banco de dados é uma coleção organizada de informações armazenadas eletronicamente, gerenciada por um SGBD (Sistema de Gerenciamento de Banco de Dados). Exemplos: PostgreSQL, MySQL, SQLite.

Um banco de dados bem definido permite:

  • armazenar informações de forma segura
  • recuperar dados rapidamente
  • atualizar informações sem perda de consistência
  • evitar duplicidade
  • organizar grandes volumes de dados
  • realizar consultas complexas
  • sustentar o crescimento do sistema

Sem um banco bem definido, o sistema pode sofrer com lentidão, inconsistência de dados, retrabalho futuro e limitações técnicas.


Por que usar banco relacional (SQL)

Como já definido no estudo anterior, o ideal para o projeto é um banco relacional. Os dados do sistema serão estruturados, relacionais, consistentes e conectados entre si:

  • usuários e autenticação
  • histórico e interações
  • registros processados pela IA

Bancos relacionais armazenam dados em tabelas, linhas e colunas, com integridade relacional, consistência, suporte ACID e consultas complexas.


Tecnologias avaliadas

PostgreSQL

Vantagens

  • excelente compatibilidade com Python
  • integração nativa com Flask
  • suporte completo ao SQLAlchemy e psycopg
  • suporte a JSON e JSONB
  • consultas complexas eficientes
  • ótima escalabilidade e robustez para produção
  • forte suporte da comunidade

Limitações

  • configuração inicial um pouco mais complexa
  • curva de aprendizado maior para iniciantes

MySQL

Vantagens

  • popular e bem documentado
  • integração com Python
  • bom desempenho geral

Limitações

  • suporte JSON menos avançado que PostgreSQL
  • menor flexibilidade para consultas complexas
  • menos recursos para IA futura

SQLite

Vantagens

  • extremamente simples
  • não exige servidor
  • ideal para testes locais

Limitações

  • não recomendado para produção escalável
  • limitações de concorrência
  • pouca robustez para múltiplos usuários

Comparação técnica

Critério PostgreSQL MySQL SQLite
Python Excelente Muito bom Excelente
Flask Excelente Muito bom Excelente
SQLAlchemy Excelente Excelente Excelente
psycopg Nativo Não Não
JSON Excelente Bom Limitado
Escalabilidade Alta Média/Alta Baixa
Produção Excelente Muito bom Fraco
Testes locais Bom Bom Excelente

Compatibilidade com o backend

O backend será desenvolvido em Python com Flask. As bibliotecas utilizadas serão:

  • SQLAlchemy
  • psycopg
  • Flask-SQLAlchemy

O Flask se integra facilmente com PostgreSQL via URI:

app.config["SQLALCHEMY_DATABASE_URI"] = "postgresql+psycopg://user:password@localhost/projeto"

O SQLAlchemy oferece ORM completo, mapeamento objeto-relacional, migrations, segurança nas queries e manutenção simplificada, com excelente suporte ao PostgreSQL.


Compatibilidade com futura integração com IA

O sistema poderá futuramente integrar NLP, embeddings, análise textual, classificação automática e recomendações inteligentes. O PostgreSQL oferece vantagens importantes para isso:

JSONB — permite armazenar metadados e resultados de modelos de IA de forma estruturada.

Extensões futuras — o PostgreSQL suporta full-text search, indexação avançada e vetores, facilitando integração com spaCy, transformers, modelos locais e APIs externas de IA.


Banco recomendado: PostgreSQL

Justificativa

O PostgreSQL foi escolhido porque oferece:

  • melhor compatibilidade com Python e Flask
  • suporte completo ao SQLAlchemy e psycopg
  • suporte avançado a dados estruturados e JSON para IA futura
  • escalabilidade, segurança e robustez para produção

Uso no projeto

  • Ambiente local — PostgreSQL como banco principal; SQLite apenas para testes rápidos (totalmente opcional)
  • Produção — PostgreSQL como banco oficial

Próximos estudos necessários

Modelagem de dados

  • entidades, relacionamentos, cardinalidade e normalização

SQL básico

  • SELECT, INSERT, UPDATE, DELETE, JOIN, GROUP BY

SQLAlchemy ORM

  • models, relationships, sessions e migrations

Migrações

  • Flask-Migrate e Alembic para versionar alterações e manter histórico do schema

Performance futura

  • índices, otimização de consultas, monitoramento e tuning

Conclusão

Após análise técnica das alternativas, o banco de dados definido para o projeto é o PostgreSQL.

A escolha antecipa e evita retrabalho estrutural, perda de performance, incompatibilidades e limitações futuras com IA, oferecendo segurança técnica para o presente e flexibilidade para a evolução futura do sistema.