Voltar aos materiais
TUTORIALSURREALQLVIBE-CODINGARQUITETURA

SurrealDB para vibe coding: do primeiro schema a um produto real

Um guia completo para sair do banco improvisado pela IA e criar uma base com schema, relações, permissões, migrações e operação preparada para usuários reais.

Por Mauro Mequelussi

9_MIN
SurrealDB para vibe coding: do primeiro schema a um produto real
Em resumo

Um guia completo para sair do banco improvisado pela IA e criar uma base com schema, relações, permissões, migrações e operação preparada para usuários reais.

Vibe coding encurtou o caminho entre uma ideia e a primeira tela. O banco de dados continua sendo o lugar onde essa ideia vira — ou deixa de virar — um produto confiável.

SurrealDB é um banco multi-modelo que reúne documentos, relações de grafo, consultas em tempo real, busca textual e vetorial em uma única plataforma. Para quem cria com IA, isso reduz a quantidade de serviços que o agente precisa conectar e dá ao projeto um modelo de dados explícito para seguir.

Este guia mostra como começar sem transformar velocidade em dívida técnica. A meta não é apenas salvar um cadastro: é criar uma base que possa receber autenticação, permissões, pagamentos e usuários reais.

O que é SurrealDB?

SurrealDB é um banco de dados multi-modelo: o mesmo registro pode ter campos estruturados e objetos aninhados, apontar diretamente para outros registros e participar de relações com propriedades próprias. Tudo é consultado com SurrealQL, uma linguagem parecida com SQL, mas preparada para documentos e grafos.

Na prática, isso permite começar com um único banco para vários problemas que normalmente pediriam Postgres, um banco de documentos, uma camada de tempo real e um serviço de vetores.

Necessidade do produtoRecurso no SurrealDB
Cadastros e transaçõestabelas, campos, índices e transações
Dados flexíveisobjetos e arrays dentro do registro
Comunidade e recomendaçõesrelações de grafo com RELATE
Interfaces atualizadaslive queries e WebSocket
Busca por significadovetores e índices HNSW ou MTree
Controle de acessoautenticação e permissões no banco

Essa combinação não elimina arquitetura. Ela diminui a quantidade de peças, enquanto deixa mais visível o que o produto realmente precisa modelar.

Por que ele combina com vibe coding?

Uma IA produz código melhor quando encontra contratos claros. Se o banco aceita qualquer campo, qualquer formato e qualquer operação, o agente também tende a improvisar. Com tabelas SCHEMAFULL, tipos e regras de validação, o schema vira contexto executável: ele orienta a IA e rejeita dados que não respeitam o produto.

Flexível não significa sem schema
Use a flexibilidade para modelar objetos e relações com naturalidade. Use SCHEMAFULL, tipos, índices e permissões para proteger tudo que já virou regra do negócio.

Um primeiro schema que já nasce como produto

Imagine um aplicativo brasileiro para profissionais autônomos organizarem clientes e serviços. O protótipo precisa cadastrar clientes; o produto precisa impedir e-mails inválidos, representar preços com precisão e saber quem contratou qual serviço.

database/schema.surqlsurql
DEFINE TABLE cliente SCHEMAFULL;
DEFINE FIELD nome ON cliente TYPE string;
DEFINE FIELD email ON cliente TYPE string
  ASSERT string::is_email($value);
DEFINE FIELD criado_em ON cliente TYPE datetime
  DEFAULT time::now();
DEFINE INDEX cliente_email ON cliente FIELDS email UNIQUE;

DEFINE TABLE servico SCHEMAFULL;
DEFINE FIELD nome ON servico TYPE string;
DEFINE FIELD preco_centavos ON servico TYPE int
  ASSERT $value >= 0;
DEFINE FIELD ativo ON servico TYPE bool DEFAULT true;

DEFINE TABLE contratou SCHEMAFULL
  TYPE RELATION IN cliente OUT servico;
DEFINE FIELD status ON contratou TYPE string
  ASSERT $value IN ['interessado', 'ativo', 'encerrado'];
DEFINE FIELD contratado_em ON contratou TYPE datetime
  DEFAULT time::now();
DEFINE INDEX contratacao_unica ON contratou FIELDS in, out UNIQUE;

Há decisões de produto escondidas nesse exemplo. Dinheiro fica em centavos para evitar arredondamento de ponto flutuante. O e-mail é único. A contratação é uma relação que guarda estado e data. O índice na aresta impede o mesmo cliente de contratar o mesmo serviço duas vezes por acidente.

Criando e consultando dados com SurrealQL

Com o schema aplicado, podemos criar os registros e conectá-los:

database/primeiros-dados.surqlsurql
CREATE cliente:ana CONTENT {
  nome: 'Ana Souza',
  email: 'ana@example.com'
};

CREATE servico:mentoria CONTENT {
  nome: 'Mentoria de produto',
  preco_centavos: 35000
};

RELATE cliente:ana->contratou->servico:mentoria
  SET status = 'ativo';

SELECT
  nome,
  ->contratou.{ status, contratado_em, out.nome AS servico }
FROM cliente:ana;

O ganho não está em escrever menos caracteres. Está em consultar uma pergunta do domínio — “quais serviços Ana contratou e qual é o estado de cada contratação?” — sem esconder o significado da relação numa tabela genérica.

[ CONTEÚDO_INTEGRAL_DISPONÍVEL ]

Continuar: do schema local à operação segura

CLIQUE PARA DESBLOQUEAR A LEITURA

Construindo aplicações robustas com arquitetura de alto nível e infraestrutura otimizada na edge do Cloudflare Workers com SurrealDB.

Segurança de dados e conformidade com privacidade desde o primeiro dia de código com tratamento de estados e sessões resilientes.

Métricas de performance para monitorar a experiência do usuário e otimizar custos operacionais em produção com dashboards estruturados.

Continuação liberada

Local, Cloud ou servidor próprio?

O modo de execução deve acompanhar o estágio e o risco do produto.

EstágioCaminho sensatoCuidado principal
AprendizadoSurrealist Sandbox ou instância localsandbox não serve para medir desempenho
Protótipo persistentelocal com armazenamento em discobackup e credenciais continuam necessários
MVP públicoSurrealDB Cloud ou single-node bem operadoTLS, backup, observabilidade e atualização
Operação críticaCloud com alta disponibilidade ou cluster apropriadocusto, recuperação e tolerância a falhas

A documentação oficial de deployment explica os modelos gerenciado, single-node, distribuído e embarcado. Para quem está lançando o primeiro produto, a melhor escolha costuma ser a que reduz operação sem esconder como os dados são protegidos.

A fronteira correta entre navegador e banco

SurrealDB permite autenticação e permissões detalhadas, mas isso não autoriza colocar uma credencial administrativa no front-end. O navegador deve receber apenas uma sessão limitada ao usuário. Operações internas — conciliação de pagamento, administração, importação e manutenção — ficam atrás de uma API ou de uma conexão de serviço protegida.

Em um produto com dados pessoais, trate nome, telefone, endereço, documentos e histórico como informações que precisam de finalidade, retenção e acesso definidos. A LGPD não se resolve escolhendo um banco; ela exige que o produto saiba quais dados coleta, por que coleta e quem consegue lê-los.

Nunca entregue root para a interface ou para um agente
Crie usuários e acessos com o menor privilégio possível. Uma ferramenta de IA deve enxergar apenas o namespace, o banco e as operações necessárias para a tarefa atual.

Use parâmetros, não concatenação

Código gerado por IA frequentemente monta consultas juntando texto. Isso abre espaço para injeção e erros de tipo. Prefira variáveis vinculadas pelo SDK.

server/repositories/clientes.tsts
export async function buscarClientePorEmail(db: Surreal, email: string) {
  const [clientes] = await db.query(
    'SELECT * FROM cliente WHERE email = $email LIMIT 1',
    { email },
  )

  return clientes?.[0] ?? null
}

O banco recebe a consulta e os dados separadamente. Além de ser mais seguro, esse padrão deixa clara a fronteira entre código e entrada do usuário.

Schema também precisa de versão

Quando o projeto sai do protótipo, editar o banco manualmente deixa de ser aceitável. Guarde definições e mudanças no repositório, revise o plano antes de aplicar e teste a migração contra uma base descartável.

O SurrealKit existe para organizar schema, rollouts, seeds e testes. A ferramenta não substitui revisão: uma remoção de campo, um novo índice único ou uma mudança de tipo pode falhar por causa dos dados que já existem.

Um fluxo responsável tem cinco passos:

  1. alterar o schema em arquivo;
  2. gerar ou escrever a migração;
  3. revisar operações destrutivas;
  4. testar com dados representativos;
  5. aplicar com backup e caminho de recuperação.

O prompt que dá contexto sem dar poder demais

Em vez de pedir “crie meu banco”, descreva o domínio e peça uma proposta revisável.

Modelar um MVP no SurrealDBAgente de código

Você vai propor um schema SurrealDB para um MVP brasileiro de agenda de serviços.

Entidades: profissional, cliente, servico e agendamento. Regras:

  • preços armazenados em centavos;
  • datas em datetime e timezone tratado pela aplicação;
  • um profissional só acessa seus próprios clientes;
  • um horário não pode ser reservado duas vezes;
  • cancelamentos precisam manter histórico.

Entregue:

  1. decisões de modelagem e riscos;
  2. schema SurrealQL SCHEMAFULL;
  3. índices e asserts;
  4. permissões sugeridas;
  5. cinco testes que devem falhar quando uma regra for violada.

Não aplique nada e não use credenciais administrativas.

Esse formato força o agente a explicar decisões antes de alterar dados. Também torna as regras verificáveis.

Checklist antes de colocar usuários reais

  • schema versionado e reproduzível;
  • credenciais diferentes para desenvolvimento e produção;
  • nenhum segredo enviado ao navegador;
  • consultas parametrizadas;
  • permissões testadas com usuário comum, não apenas com root;
  • índices para unicidade e consultas frequentes;
  • política de backup e teste de restauração;
  • logs sem senhas, tokens ou dados pessoais desnecessários;
  • ambiente de staging ou base descartável para migrações;
  • monitoramento de erro e tempo de consulta.

Perguntas frequentes sobre SurrealDB

SurrealDB substitui Postgres?

Não em todos os casos. Postgres continua excelente para domínios relacionais tradicionais e equipes que dependem de seu ecossistema maduro. SurrealDB faz mais sentido quando documentos, grafos, tempo real ou vetores reduzem a quantidade de sistemas do produto. Veja a análise completa em SurrealDB vs Postgres.

Preciso saber SQL?

Conhecer SQL ajuda porque SurrealQL mantém conceitos familiares como SELECT, CREATE, índices e transações. Você também precisará aprender record IDs, objetos, relações e travessias de grafo.

Posso usar SurrealDB com Nuxt, React ou aplicativos mobile?

Sim. Existem SDKs e APIs para diferentes runtimes. A decisão importante é onde cada conexão roda e quais permissões ela recebe, não o framework visual.

SurrealDB é uma boa escolha para meu primeiro SaaS?

Pode ser, principalmente quando as relações do domínio são centrais. Faça uma prova de conceito com as consultas mais importantes, autenticação e uma migração antes de assumir que qualquer banco atenderá todo o produto.

O próximo passo

Crie uma base pequena, mas completa: duas ou três entidades, uma relação importante, um índice de unicidade, uma regra de acesso e um teste que prova que a regra funciona. Depois conecte a interface.

A IA pode escrever o primeiro rascunho em minutos. O produto nasce quando você consegue explicar o modelo, reproduzir o schema e impedir operações que nunca deveriam acontecer.

Do vibe ao produto. Com método.

Comece a construir

Quer transformar uma ideia em produto? O kit Sniper Apps reúne base, componentes e método para publicar com mais velocidade.

CONHECER_O_KIT →
Continue explorando
Ver todos os artigos →