You should have one transaction table. It will make it so much easier to do financial reports and stats.
Don't forget to have fields to process
- refunds
- advance payments
- partial payments
- afterpay type support (there are ones that pay right away, and others that pay periodically)
I handle refunds by storing negative quantities instead of positive. Thing to watch out for, you can make the qty and total price negative, but not the unit price. Otherwise, two negatives multiplied together give a positive. On one project, I put in a field (a flag) to indicate a refund. It just helped in reports to distinguish refunds for stats.