2016-10-09
Se você vem do mundo relacional, a maior dificuldade com MongoDB não é a sintaxe. É mudar a forma de pensar sobre dados. Nesta segunda parte, vamos além do básico.
No modelo relacional, você normaliza tudo. Separa dados em tabelas, cria chaves estrangeiras, faz JOINs. No MongoDB, a ideia é diferente: você modela os dados de acordo com como eles serão consumidos.
No MongoDB, existem duas formas principais de relacionar dados:
Você coloca os dados relacionados dentro do próprio documento:
{
"nome": "Laura",
"enderecos": [
{ "rua": "Rua das Flores", "cidade": "São Paulo" },
{ "rua": "Av. Brasil", "cidade": "Rio de Janeiro" }
]
}
Use embedding quando:
Você guarda apenas o ID do documento relacionado:
// Coleção: usuarios
{ "_id": ObjectId("abc123"), "nome": "Laura" }
// Coleção: pedidos
{ "usuario_id": ObjectId("abc123"), "produto": "Notebook", "valor": 3500 }
Use referências quando:
No relacional, você pergunta: “como eu normalizo isso?”. No MongoDB, a pergunta certa é: “como minha aplicação vai ler esses dados?”.
Se uma tela mostra o usuário com seus endereços, faz sentido ter tudo num documento só. Se outra tela lista todos os pedidos independente do usuário, faz sentido separar.
No relacional, duplicar dados é pecado. No MongoDB, é estratégia. Você duplica quando isso melhora a performance de leitura. A troca é: leituras rápidas por escritas um pouco mais complexas.
Mudar o jeito relacional de pensar leva tempo. O segredo é sempre partir de como a aplicação consome os dados, não de como eles se relacionam em teoria.