Rappresenta la suddivisione di categorie in un database di finanza personale

0

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.

    
posta Eric 30.10.2014 - 09:39
fonte

3 risposte

1

Il design del tavolo per un sistema di contabilità a partita doppia è stato ben compreso negli ultimi 35 anni. Dovresti riuscire a trovare centinaia di esempi sul Web.
Potresti riuscire a trovare un modello nel sito web Modelli di dati .

La contabilità a partita doppia è probabilmente esagerata per le finanze personali, ma probabilmente puoi iniziare con un modello di dati per la doppia registrazione, e quindi creare un'applicazione che faccia apparire la contabilità di una singola voce per il tuo utente.

Se non capisci la contabilità a partita doppia, forse dovresti impararla prima di avventurarti nella creazione di app finanziarie per altre persone.

    
risposta data 30.10.2014 - 12:28
fonte
0

Aggiungerei due colonne integer extra nella tabella Transactions e sbarazzarmi completamente della tabella Splits. Mantieni invariata la colonna ID, ma chiama uno dei nuovi campi TransactionID e l'altro SplitLine, che sarà un numero intero. I dati sarebbero simili a questo:

ID   TransactionID   SplitLineID   Amount  Category
1    1               1             12.00   Groceries
2    2               1             20.00   Household
3    3               1             5.00    Groceries
4    3               2             7.00    Books

Quindi qui la transazione 3 è per un totale di $ 12, divisa $ 5 sulla spesa e $ 7 sui libri.

    
risposta data 30.10.2014 - 16:03
fonte
-2

La voce doppia gestisce bene le transazioni divise.

Verifica credito 200 e addebito della spesa 150 debito famiglia 50

Debiti = Crediti.

La doppia voce significa registrare sia debito che credito (i).

    
risposta data 18.04.2015 - 11:14
fonte

Leggi altre domande sui tag