Digamos que você seja um revendedor de carros, vendendo carros.
Quando um cliente compra um carro novo, ele geralmente troca o carro existente.
Qual modelo de dados faz mais sentido?
A) criar um registro de pedido de venda para a venda e um registro de pedido de compra para a troca e vinculá-los (related_order_id)?
B) criar um registro de pedido de venda para a venda e um ajuste de pedido de venda para a troca?
C) algo mais?
Eu recomendaria modelá-lo como uma venda com um ajuste para a troca, supondo que, como revendedor de automóveis, você aceite trocas sem uma venda relacionada de um carro.
Portanto, em seu sistema, você reutiliza os recursos de compra e, posteriormente, pode relatar métricas como quantas vendas estão vinculadas a trocas, quais valores de vendas estão vinculados a trocas, se as trocas aumentam as vendas etc.
Acho que você deve modelá-lo como "porta número três" - outra coisa . Embora, do ponto de vista da venda de veículos, você tenha uma permissão de troca (valor em dólar), não é aí que termina o interesse no evento.
Cada item obtido no comércio torna-se um item de estoque que deve ser armazenado e eventualmente descartado.
Embora seja raro, pode acontecer que mais de um item seja levado no comércio.
Eu modelaria uma troca como uma tabela separada (opcionalmente?) Vinculada a uma venda. Isso fornece a você algo para vincular outros eventos e/ou itens, como inventário, avaliações, ordens de serviço para reparos e qualquer outra atividade relacionada à aceitação e descarte do veículo negociado.