Tenho uma tabela de transações que contém compras e reembolsos. Eu gostaria de criar uma ligação entre compra e reembolso na mesma tabela (decidi não usar uma tabela separada). Não tenho certeza em qual direção a ligação deve ir. (Uma compra só pode ter um reembolso - isso é garantido)
- Opção 1 - O reembolso está vinculado à compra
TrxID | valor | reembolsado TrxID |
---|---|---|
1 | 10 | |
2 | -10 | 1 |
- Opção 2 - A compra está vinculada ao Reembolso. (fácil ver se um trx tem reembolso e qual é)
TrxID | valor | reembolsoTrxID |
---|---|---|
1 | 10 | 2 |
2 | -10 |
Existe uma maneira padrão de modelar isso? Ou não importa, pois é basicamente a mesma junção?
SQL Server, mas aplicável a RDBMs
Eu iria trabalhar na opção 1. Você sempre terá uma compra, mas nem sempre um reembolso correspondente.
Dessa forma, você pode reembolsar a chave estrangeira para uma compra existente em purchase_id; para garantir que existe uma compra válida para o reembolso.
Considerando que com a opção 2, você não poderia comprar a chave estrangeira para reembolsar, pois ela ainda não existiria. Se você tentasse seguir esse caminho, teria que inserir uma linha no reembolso quando isso acontecer e também dar a volta e atualizar a compra com essas informações.
Quanto à facilidade de ver o que tem reembolso ou não, você sempre pode criar visualizações para isso.