Sto creando software di contabilità. Devo imporre la contabilità in partita doppia. Ho il classico problema di una riga per transazione rispetto a due righe.
Facciamo un esempio e vediamo come verrebbe implementato in entrambi gli scenari.
Considera account Cash
e account Rent
. Quando pago l'affitto mensile, trasferisco $ 100 dal mio Cash
account al mio Rent
account.
Una riga per transazione
In un sistema a una riga, tale transazione verrebbe memorizzata come:
transazioni
tx_id | posting_date
1 | 23/05/2015
transaction_records
id | tx_id | credit_account | debit_account | amount
1 | 1 | Cash | Rent | 100.00
Due righe per transazione
In un sistema a due file, dovrei rispecchiare lo stesso record di transazione per creare un record opposto che una volta sommati entrambi, otterrei un saldo pari a zero.
transazioni
tx_id | posting_date
1 | 23/05/2015
transaction_records
id | tx_id | type | account | amount
1 | 1 | credit | Cash | 100.00
2 | 1 | debit | Rent | 100.00
Il problema
Prima di tutto vorrei sottolineare: il motivo per cui ho entrambi transactions
e le transaction_records
tabelle (anziché una tabella) è quello di essere in grado di gestire le transazioni divise (un caso in cui trasferisco $ 100 dal Cash
conto a due o più conti diversi).
All'inizio ho provato a implementarlo con una riga per transazione, ma è una seccatura calcolare il saldo del conto e recuperare effettivamente i dati.
Mi sto inclinando verso il secondo scenario; tuttavia, presenta anche alcuni problemi:
- Come aggiorno un singolo record? Supponendo di aver fatto un errore e invece di registrare $ 100 per il mio affitto, ho registrato $ 10. Ora ho 2
transaction_records
- uno per il credito e uno per il debito, entrambi con un importo di $ 10. - Ora faccio la mia riconciliazione e voglio correggere questo errore di battitura. Come lo risolverei nel database? Non conosco la connessione tra i record e, in caso di divisione, una transazione può avere più di 2 record. L'unica soluzione che mi è venuta in mente è di aggiungerne alcuni
ref_id
per ogni coppia di record che identificherà in modo univoco quei record come "lati opposti l'uno dell'altro" all'interno di un contesto di uno specificotx_id
.
Quale approccio è migliore / più semplice?
Per semplificare la mia domanda: voglio rappresentare un movimento di fondi dal conto A al conto B. I due scenari che ho fornito sono entrambi progetti validi per archiviare tale transazione. Come ho anche sottolineato, entrambi hanno contro e pro (il primo: più facile da salvare, più difficile da recuperare; il secondo è l'opposto).
Potrebbero avere altri pro / contro che non vedo in questo momento, quindi chiedo un parere a persone più esperte.