Resolvendo relacionamentos
Entidades raramente existem isoladas. Uma pessoa é empregada por uma organização, possui uma apólice, pertence a um domicílio. Uma empresa possui subsidiárias. Relacionamentos tornam esses vínculos dados governados de primeira classe, em vez de algo inferido no momento da consulta.
Relacionamentos versus atributos
Tipos de relacionamento, cada um com a cardinalidade e a direção que o resolvedor impõe.
A decisão que mais importa ao modelar: a coisa relacionada é algo que você governa?
| A coisa relacionada é… | Modele como | Por quê |
|---|---|---|
| Governada — é uma entidade que você mantém | Um relacionamento | A entidade relacionada é dona dos próprios dados. Copiá-los para este registro garante que as cópias divirjam. |
| Não governada — você não guarda registro dela | Um atributo | Um contato de emergência que você nunca governa não deveria obrigá-lo a inventar uma entidade pessoa. |
Guardar um vínculo tanto como relacionamento quanto como atributo desnormalizado significa duas cópias de um fato, e elas vão divergir. Escolha uma.
O problema da resolução
Sistemas de origem raramente conhecem os identificadores da plataforma. Eles referenciam o outro lado de um relacionamento pelo que têm — um identificador fiscal, um número de conta, um código de registro:
{
"employee": "E-4471",
"employer_tax_id": "12-3456789"
}
Esse identificador precisa se tornar um vínculo com uma organização governada. Fazê-lo ingenuamente falha em duas direções: o empregador pode ainda não ter sido carregado, e o identificador pode corresponder a mais de um candidato.
A plataforma trata isso com asserções. A afirmação de cada origem é registrada como uma asserção por direito próprio, e um resolvedor transforma asserções em arestas canônicas quando — e apenas quando — puderem ser resolvidas sem ambiguidade.
Uma asserção que ainda não pode ser resolvida não é perdida nem chutada. Ela espera, e é reprocessada conforme mais dados chegam.
| Estado da asserção | Significado |
|---|---|
| Pendente | A entidade referenciada ainda não foi encontrada |
| Resolvida | Existe uma aresta canônica |
| Ambígua | A chave natural correspondeu a mais de um candidato — uma pessoa decide |
| Conflitante | O destino foi encontrado, mas a aresta não pôde ser criada — na maioria das vezes uma regra de cardinalidade a bloqueou |
É por isso que relacionamentos sobrevivem a carregamento fora de ordem: asserções registram o que cada origem disse, independentemente de a plataforma ter podido agir sobre isso ainda.
Vigência
Relacionamentos carregam um período de vigência, então um vínculo que termina é encerrado em vez de excluído. Perguntar quem era o proprietário de um ativo em março passado devolve a resposta certa.
Quando um fato muda — um ativo vendido, um vínculo empregatício encerrado — a janela anterior fecha e uma nova abre. O histórico permanece intacto.
Interação com a consolidação
Quando duas entidades se consolidam, relacionamentos que apontam para o registro absorvido passam a apontar para o sobrevivente, com deduplicação onde ambos os lados já compartilhavam uma contraparte. Desfazer restaura o arranjo original.
A seguir
Última verificação no commit d3c2586b (2026-08-03)