# dare / avere
TIPI (id_tipo, testo_tipo)
# acquisto / vendita / prestito / altro
CAUSALI (id_causale, testo_causale)
# cancellato / riscosso / in essere
STATI (id_stato, testo_stato)
# chi è (anagrafica contatti)
UTENTI (id_utente, nome, cognome ... dati_anagrafici ...)
# quando, quanto, tipo movimento, causale movimento, stato movimento, utente
MOVIMENTI (id_movimento, data_movimento, importo_movimento, id_tipo, id_causale, id_stato, id_utente)
in questo modo hai una gestione ottimizzata per fare reports statistici, avendo una tabella senza campi varchars per i movimenti (rapidissima)
Hai inoltre la possibilità di cambiare "tutto senza modificare niente", tutto riferito alle diciture (o dati cliente o altro), niente riferito allo storico dei movimenti
non so è la soluzione migliore ma probabilmente è quella che avrei adottato io soprattutto per il discorso estendibilità o riutilizzo (anagrafica o altro)
[edit]
io aggiungerei anche una tabella STORICO, per avere lo stato dei tempi tra una modifica dello stato di un movimento ed un'altra (quando è stato fatto il prestito, quando è stato riscosso)