Pular para o conteúdo principal

Conceitointermediário

Modelagem de Dados

Visão Geral

Modelar dados é decidir quais entidades existem, quais atributos elas têm, como se relacionam e onde ficam as fronteiras entre elas.

É a decisão mais cara de reverter em qualquer sistema, porque diferente do código — que se reescreve — o modelo carrega todos os registros já gravados.

E é frequentemente tomada cedo, com pouca informação, por quem tem menos contexto de negócio.

Problema

A modelagem costuma acontecer de duas formas ruins.

Do diagrama para fora. Alguém desenha as entidades do domínio como aparecem no vocabulário do negócio, normaliza tudo, e descobre depois que as consultas reais exigem oito junções.

Da tela para dentro. Alguém modela exatamente o que a primeira tela precisa, e descobre na segunda tela que o modelo não serve.

A abordagem que funciona é nem uma nem outra: modelar a partir do padrão de acesso — como o dado nasce, como muda e como é lido — mantendo o vocabulário do domínio.

Conceitos Centrais

Três níveis, e a confusão entre eles

Conceitual. Que entidades existem no negócio e como se relacionam. Sem tecnologia, sem tipo de dado. É uma conversa com quem entende o domínio.

Lógico. Atributos, chaves, cardinalidade, normalização. Ainda independente do banco.

Físico. Tipos, índices, particionamento, decisões de desempenho.

Pular direto para o físico é comum e produz modelos que refletem a limitação da ferramenta em vez do negócio. Parar no conceitual produz modelos bonitos que não funcionam.

O padrão de acesso decide

As perguntas que precedem qualquer diagrama:

como o dado é criado? um por vez, em lote, por evento
como é lido? por chave, por filtro, por varredura
com que frequência? leitura vs escrita, ordem de grandeza
o que muda? quais atributos, com que frequência
o que precisa ser atômico? quais mudanças acontecem juntas
o que é histórico? o que precisa ser preservado

A quinta pergunta é a que define fronteiras de agregado. A sexta é a mais esquecida e a que mais causa arrependimento.

Modelar o tempo é a decisão silenciosa

Quase todo modelo trata os dados como estado atual. E quase todo negócio, mais cedo ou mais tarde, pergunta "como estava em março?".

Três abordagens, com custos crescentes:

Só o estado atual. Simples, e o passado se perde.

Histórico de alterações. Uma tabela de auditoria ao lado. Barato e cobre a maioria das necessidades.

Versionamento temporal. Cada registro com período de validade. Permite reconstruir qualquer momento, e complica toda consulta.

Decidir isso depois de dois anos de operação significa que o histórico daqueles dois anos não existe. É irrecuperável — a única decisão desta seção que não admite correção retroativa.

Identidade: natural ou artificial

Usar um identificador do negócio — CPF, código de produto — como chave parece econômico e cria acoplamento: quando o negócio muda a regra do código, o modelo inteiro sente.

A prática robusta é chave artificial como identidade, e o identificador de negócio como atributo com restrição de unicidade — que pode ser alterado sem quebrar referências.

Nomear é modelar

Um atributo chamado status com valores que o time interpreta de formas diferentes é um defeito de modelagem, não de documentação.

O vocabulário do modelo deve ser o do domínio, e o mesmo termo deve significar a mesma coisa em todo lugar. Ver linguagem ubíqua.

O modelo evolui, e a migração é parte do desenho

Nenhum modelo sobrevive intacto. O que distingue um modelo sustentável não é estar certo desde o início — é ser possível mudá-lo.

Isso significa: evitar tabelas tão largas que qualquer alteração é arriscada, evitar chaves que impedem redistribuição, e manter uma trilha de migrações versionada desde o primeiro dia.

Modelo Mental

Modele a partir de como o dado será usado, não de como ele é descrito. E decida sobre o tempo antes de precisar dele.

Quando Usar

Modelagem explícita se paga sempre que:

  • Os dados sobrevivem ao sistema atual — quase sempre.
  • Mais de um time lê ou escreve.
  • Há requisito de histórico ou auditoria.
  • O volume vai crescer em ordens de grandeza.

Quando Não Usar

Modelagem elaborada para dado descartável. Cache, telemetria de curta retenção, rascunho.

Normalizar por princípio. Ver normalização — é decisão, não virtude.

Modelar todas as entidades do domínio antes de construir. O modelo completo antecipado envelhece antes de ser usado.

Modelo genérico — tabelas de "entidade" e "atributo" que servem para tudo. Elas eliminam esquema, índice e legibilidade de uma vez.

O último é um antipadrão persistente e vale nomeá-lo: um modelo que serve para qualquer coisa não serve bem para nada.

Alternativas

  • Modelagem dirigida por domínio — agregados como fronteira. Ver DDD.
  • Modelagem dimensional — para analítico. Ver data warehouse.
  • Esquema por leitura — guardar bruto e interpretar na leitura; adequado a ingestão exploratória, e ver data lake para os riscos.

Trade-offs

Modelo estritoModelo flexível
Garantias no armazenamentoValidação na aplicação
Evolução planejadaIncremental
Consultas não previstasLimitadas
Migração custosaBarata
Com históricoSó estado atual
Reconstrói o passadoPerde
Consultas mais complexasDiretas
Volume maiorMenor
Auditoria nativaAusente

Modos de Falha

Histórico inexistente quando alguém pergunta. Irrecuperável.

Fronteira de agregado errada. Transações distribuídas viram rotina.

Chave natural mudando. O negócio altera a regra e as referências quebram.

Tabela larga demais. Qualquer alteração de esquema é operação de risco.

Vocabulário ambíguo. O mesmo campo significa coisas diferentes por serviço.

Modelo genérico. Sem esquema, sem índice útil, sem legibilidade.

Erros Comuns

Modelar a partir da tela.

Não decidir sobre o tempo.

Chave natural como identidade.

Normalizar ou desnormalizar por hábito em vez de por padrão de acesso.

Não versionar migrações desde o início.

Adiar a conversa com o negócio. O modelo conceitual não é trabalho técnico.

Exemplo Real

Um sistema de gestão de planos de saúde modelou beneficiários com estado atual: nome, plano, categoria, dependentes.

Funcionou por três anos. Então a auditoria regulatória pediu: "qual era a categoria deste beneficiário em cada mês dos últimos cinco anos?".

A resposta não existia. Cada mudança de categoria sobrescrevia a anterior.

A reconstrução parcial foi feita a partir de registros de aplicação e de arquivos de faturamento, com esforço de quatro meses e resultado incompleto. Houve multa.

A correção mudou o modelo para versionamento temporal nos atributos que importam — categoria, plano e valor — com período de validade. Os demais permaneceram como estado atual.

Duas observações que a equipe registrou:

Não era preciso versionar tudo. A discussão inicial considerou temporalizar o modelo inteiro, o que teria complicado todas as consultas. Apenas três atributos tinham requisito real de histórico.

Uma tabela de auditoria desde o início teria bastado. Não era necessário versionamento temporal completo em 2022 — bastava registrar as mudanças. O custo teria sido de dias, e a informação existiria.

A pergunta "o que alguém pode querer saber sobre o passado disto?" não tinha sido feita.

Conceitos Relacionados

Exercício Prático

Para as três entidades mais importantes do seu sistema, responda: se alguém perguntar como este registro estava há um ano, você consegue responder?

Onde não conseguir, decida agora se isso é aceitável. Daqui a dois anos a decisão não estará mais disponível.

Perguntas de Entrevista

  • Por que o padrão de acesso deve preceder o diagrama?
  • Qual o risco de usar identificador de negócio como chave?
  • Por que a decisão sobre histórico não admite correção retroativa?

Para Aprofundar

  • Fowler, Martin. Patterns of Enterprise Application Architecture. Addison-Wesley, 2002.
  • Kleppmann, Martin. Designing Data-Intensive Applications. O'Reilly, 2017.
  • Hay, David. Data Model Patterns. Dorset House, 1996.
Terminou de ler este documento?Seu progresso fica salvo apenas neste navegador.