Sto lavorando allo sviluppo di applicazioni di finanza personale (ad esempio Quicken / Mint.com / ecc.). Ho intenzione di memorizzare i dati in un database SQLite. Sono bloccato cercando di determinare come voglio rappresentare le divisioni nel database. Ad ogni transazione verrà assegnata una categoria come "Cibo e Dinning" o "Affitto". Tuttavia, una singola transazione può essere suddivisa in più categorie. Ad esempio, una transazione in un negozio di alimentari può essere suddivisa tra "generi alimentari" e "famiglie".
Ecco una versione della mia tabella Transactions
. Le transazioni che sono suddivise avrebbero una categoria di "Split".
---Transactions Table (Option 1)---
INTEGER Id
DATE Date
REAL Amount
TEXT Description
TEXT Comment
TEXT Tags
TEXT Category
Ed ecco la mia tabella Splits
che identifica la quantità di ciascuna transazione assegnata a categorie specifiche.
---Splits Table (Option 1)---
INTERGER Id
INTEGTER TransactionId
REAL SplitAmount
TEXT Category
Il problema che ho con questa configurazione è che le due tabelle potrebbero potenzialmente non essere sincronizzate l'una con l'altra. Se una divisione viene aggiunta o rimossa, allora il codice deve sapere per cambiare la categoria della transazione da e verso "Dividi". Inoltre, l'importo totale delle divisioni associate a una transazione deve corrispondere all'importo effettivo della transazione.
In alternativa pensavo di trattare tutto solo come una divisione o "TransactionCategory". Quindi, piuttosto che assegnare un importo alla transazione, si presume che l'importo sia qualunque sia la somma delle "TransactionsCategories" per ogni transazione. Le transazioni che non sono suddivise finirebbero per avere un'unica singola riga "TransactionCategory" per identificare l'importo e la categoria della transazione. Se per qualche motivo una Transazione non ha una voce "TransactionCategory" associata, si può presumere che si tratti di una transazione non categorizzata di importo 0.
---Transactions Table (Option 2)---
INTEGER Id
DATE Date
TEXT Description
TEXT Comment
TEXT Tags
---TransactionCategories Table (Option 2)---
INTERGER Id
INTEGTER TransactionId
REAL Amount
TEXT Category
Mi sto appoggiando a questa opzione perché non devo tenere sincronizzate le due tabelle, ma sono preoccupato per il sovraccarico di dover unire le due tabelle e prendere la somma della tabella TransactionCategories ogni volta che ho bisogno di mostra un elenco di transazioni e i loro importi totali.