Boa tarde, Lucas! Tudo bem com você?
Ótima pergunta. Quando cada serviço tem seu próprio banco de dados, não podemos usar chaves estrangeiras da mesma forma que em uma aplicação monolítica. Em vez disso, precisamos adotar outras estratégias para lidar com o relacionamento entre dados de diferentes serviços. Uma abordagem comum é o uso de identificadores únicos através de APIs, como IDs de cliente, que podem ser usados para referenciar dados entre serviços. Por exemplo, o serviço de Pedidos poderia armazenar o ID do cliente para cada pedido, sem precisar de uma chave estrangeira direta no banco de dados. Vamos a um exemplo prático para ilustrar melhor:
Serviço A (Clientes):
Este serviço gerencia os dados de clientes. Ele cria e armazena o ID
de cada cliente.
const cliente = {
id: 1,
nome: 'Lucas Fernandes',
email: 'lucas@email.com'
};
console.log(cliente);
Serviço B (Pedidos):
Quando um pedido é criado, o ID do cliente é enviado para vincular o pedido ao cliente, mas o relacionamento fica implícito.
// Exemplo de criação de pedido associado a um cliente
const pedido = {
id: 101,
clienteId: 1, // ID do cliente vindo do Serviço A
itens: ['produto1', 'produto2'],
total: 150.00
};
console.log(pedido);
Neste modelo, o Serviço B armazena apenas o clienteId
como referência, mas as informações completas sobre o cliente continuam no Serviço A. Se o Serviço B precisar de detalhes sobre o cliente, ele pode fazer uma chamada para a API do Serviço A.
Outra estratégia é o uso de eventos e filas de mensagens. Quando um cliente é criado ou atualizado no serviço A, um evento pode ser publicado em um sistema de mensagens (como RabbitMQ ou Kafka), e o serviço B pode consumir esse evento para atualizar ou criar registros relacionados em sua própria base de dados.
Para saber mais:
Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado