Se você já ficou olhando para seu console Firestore se perguntando 'onde coloquei esses dados?' ou 'por que essa consulta não está funcionando?', você não está sozinho. Firestore é poderoso, mas sua natureza NoSQL confunde a maioria dos desenvolvedores — especialmente aqueles vindos de bancos de dados SQL. Vamos detalhar exatamente por que é confuso e o que você pode fazer sobre isso.
Por Que Firestore Parece Tão Diferente
Se você usou MySQL, PostgreSQL ou qualquer banco de dados SQL, treinou seu cérebro para pensar em tabelas, linhas e joins. Firestore joga tudo isso fora. Não há tabelas — só coleções. Não há linhas — só documentos. Não há joins — só dados desnormalizados. E nenhuma imposição de schema — documentos na mesma coleção podem ter campos completamente diferentes.
A mudança de modelo mental:
SQL
Tabelas com colunas fixas → Linhas seguem um schema estrito → JOINs combinam dados relacionados → Normalização evita duplicação
Firestore
Coleções com documentos flexíveis → Cada documento pode diferir → Sem JOINs — desnormalize → Duplicação é esperada e encorajada
5 Erros que Todo Iniciante em Firestore Comete
1. Tentar normalizar tudo
No SQL, você normaliza para evitar duplicação de dados. No Firestore, isso força você a fazer múltiplas leituras para montar uma única visualização. Em vez disso, armazene os dados onde você os lê — mesmo que isso signifique duplicar o nome de exibição de um usuário em cada comentário que ele escreve.
2. Usar arrays para relacionamentos
Armazenar um array de IDs de usuário em um documento parece lógico, mas arrays do Firestore têm limitações severas: você não pode consultar elementos individuais eficientemente, e não escalam além de alguns milhares de itens. Use subcoleções ou uma coleção separada com referências.
3. Colocar tudo em um documento
O Firestore cobra por leitura de documento, então é tentador empurrar tudo em um grande documento. Mas documentos têm limite de 1 MB, e ler um documento de 500 KB quando você só precisa de 2 campos desperdiça banda e aumenta custos. Divida em documentos menores e focados.
4. Ignorar limitações de consulta antecipadamente
O Firestore não pode fazer filtros de desigualdade em múltiplos campos em uma única consulta, não pode fazer busca full-text nativa, e requer índices para consultas compostas. Projete seu modelo de dados em torno de suas consultas desde o primeiro dia — não o contrário.
5. Não documentar a estrutura
Sem um schema, seu banco de dados Firestore se torna uma caixa preta. Novos membros da equipe adivinham nomes de campos, erros de digitação causam bugs silenciosos, e ninguém sabe se um campo é obrigatório ou opcional. Este é o erro mais comum e mais prejudicial.
Como Trazer Estrutura ao Seu Banco de Dados Firestore
A boa notícia: você pode adicionar estrutura ao Firestore sem desistir de sua flexibilidade. Aqui estão três passos práticos:
1Projete suas consultas primeiro
Antes de criar coleções, liste cada tela no seu app e que dados ela precisa. Essa abordagem query-first garante que seu modelo de dados sirva sua interface — o oposto do pensamento SQL onde você projeta tabelas primeiro.
2Use nomes e tipos de campo consistentes
Decida sobre convenções cedo: camelCase ou snake_case? Timestamps como Timestamps do Firestore ou strings ISO? Campos obrigatórios vs opcionais? Escreva essas decisões em algum lugar que sua equipe possa encontrar.
3Documente suas coleções com JSON Schema
JSON Schema é um padrão aberto que permite descrever a estrutura de cada coleção: nomes de campos, tipos, quais são obrigatórios, quais valores são válidos. É como uma planta do seu banco de dados — e serve como documentação que permanece precisa se você mantiver no seu repositório.
Como Isso Fica na Prática
Aqui está um JSON Schema simples descrevendo uma coleção users do Firestore. Note como cada campo tem um tipo e descrição — qualquer um na sua equipe pode entender o modelo de dados rapidamente:
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"collection": "users",
"description": "Registered app users",
"schema": {
"type": "object",
"properties": {
"displayName": {
"type": "string",
"description": "User's full name"
},
"email": {
"type": "string",
"format": "email",
"description": "Login email address"
},
"role": {
"type": "string",
"enum": ["admin", "editor", "viewer"],
"description": "Access control role"
},
"createdAt": {
"type": "string",
"format": "date-time",
"description": "Account creation timestamp"
}
},
"required": ["displayName", "email", "role", "createdAt"]
}
}Este arquivo de schema vive no seu repositório, é revisado em PRs, e serve como fonte única de verdade para sua coleção users. Sem mais adivinhação.
Transforme Schemas em Documentação Interativa
Uma vez que você tenha arquivos de schema para suas coleções, ferramentas como FireSchema podem renderizá-los como documentação interativa e navegável — similar a como Swagger UI funciona para APIs REST, mas projetado para bancos de dados NoSQL. É gratuito, open-source, e leva cerca de 5 minutos para configurar.
Próximos Passos
Continue construindo seu conhecimento sobre Firestore: