Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

🍃 MODELAGEM ORIENTADA A DOCUMENTOS

Se na engenharia SQL nós dividimos e isolamos os dados em dezenas de tabelas (Normalização), na engenharia Documental aplicamos frequentemente a fusão das informações vitais num pilar estratégico único. 🛡️🧩


Objetivo: Diferenciar as abordagens de Modelagem Relacional da Abordagem Documental do MongoDB 7.0, compreendendo os conceitos de Embedding, Referencing e Documentos Aninhados.


📗 PASSO 1: O Paradigma do Preço Computacional

Em sistemas RDBMS massivos, o JOIN computacional pode ser dispendioso. No MongoDB 7.0 (arquitetura BSON), se um Cliente possui "Endereços" e "Telefones", qual a forma mais rápida de exibi-los? Guardando tudo junto do Cliente!

O ato de acoplar sub-detalhes dentro do seu registro primário recebe o nome acadêmico de Embedding (Documento Incorporado).


📗 PASSO 2: Embedding vs DBRefs (Referências Virtuais)

Devemos analisar a necessidade de arquitetura com precisão lógica:

  1. 🧩 Embedding (Guardar Junto): Acessa tudo numa pancada de I/O em tela. Excelente para relacionamentos 1:1 e relacionamentos 1:N onde "N" é um número controlado.
  2. 🔗 References (Chavear/Apontar): Guarda apenas o _id do documento equivalente (Similar ao modelo Foreign Key - FK do relacional). Obrigatório se envolver um crescimento contínuo e infinito de registros M:N.

📗 PASSO 3: Diagrama de Entidade-Documento (Mermaid Híbrido)

A notação de Chen (losangos e elipses) perde eficiência diante de estruturas fortemente encadeadas (Arrays/Objetos profundos).

A notação didática da escola de inteligência de dados sugere fundir o MER (Entidade-Relacionamento) utilizando Tipos JSON explícitos (Array/Object) e detalhando no modelo do conector Mermaid a natureza da associação (EMBEDDED vs REFERENCE):

📊 Modelo Híbrido Didático (Composição MongoDB)

erDiagram    
    CLIENTE ||--o{ EMBEDDED_ENDERECO : "EMBEDDED (JSON)"
    CLIENTE ||--o{ COMPRA : "REFERENCE (DBRef)"
    
    CLIENTE {
        ObjectId _id PK
        String nome
        String email
        Array~String~ telefones
        Array~Object~ enderecos
        Document metadados
    }
    
    EMBEDDED_ENDERECO {
        String logradouro
        String cidade
        String uf
    }
    
    COMPRA {
        ObjectId _id PK
        ObjectId cliente_id FK
        Decimal128 valor_total
        Date criado_em
    }

⚠️ Atenção (Rigidez Tecnológica): Na Engenharia MongoDB v7.0, todos os documentos ganham compulsoriamente um identificador único indexado de alta performance chamado _id (do tipo ObjectId, equivalente conceitual ao UUID relacional).


📗 PASSO 4: Regra Prática de Engenharia de Sistemas (Desempenho)

A resposta da pergunta clássica moderna — "Qual abordagem usar no Mongo?"

  • Você tem um PostBlog que sempre precisa exibir uma miniatura de perfil do Autor (nome e foto_url)? Faça Embedding dos metadados essenciais.
  • Você tem um PostBlog que precisa registrar visualizações de milhares de máquinas (Analytics)? O array explodirá muito rápido! Use obrigatoriamente Referencing (DBRefs) via IDs para uma collection de logs secundária separada.

💡 Dica de Engenheiro de Dados: A normalização (1NF, 2NF, 3NF) foi projetada historicamente para salvar espaço de disco (que era caro em 1980 na matriz do sistema bancário). Hoje o disco é infinitamente barato comparado ao custo de se demorar 2 minutos aguardando relatórios em RAM para a máquina analítica de negócio (Analytics). Priorize sempre a velocidade das "QueryReads"! 🚀🛡️