Introduzione
Sto lavorando a un'applicazione in cui le organizzazioni pagano per ogni utente che aggiungono al loro "ambiente". Le organizzazioni hanno un credito / equilibrio, e fintanto che l'utente non viene rimosso, l'organizzazione paga una piccola tariffa oraria per utente. Le organizzazioni possono scegliere tra pagamenti ricorrenti e una tantum. Una fattura verrà effettuata per ogni pagamento.
Sto cercando di trovare il modo migliore per implementarlo. Finora, ho trovato due soluzioni possibili:
Opzione A
La prima soluzione possibile è quella di "registrare" ogni cambiamento di stato nel sistema riguardante utenti, pagamenti e prezzi.
Quando un'organizzazione aggiunge o rimuove un utente, verrà scritta una voce di registro. Quando viene effettuato un pagamento, verrà scritta una voce di registro. Quando il prezzo cambia, verrà scritta una voce di log. Ogni stato rilevante verrà registrato.
Utilizzando questi registri, l'applicazione può calcolare il credito / saldo.
Opzione B
La seconda soluzione possibile è implementare un credito / equilibrio fisico. Invece di registrare tutto, verrà eseguito un cron job orario che sottrae la commissione per utente dal credito / saldo dell'organizzazione.
Questa seconda opzione mi sembra molto più semplice. Evita di fare tutti i tipi di calcoli complessi utilizzando più tabelle e record. Probabilmente avrò bisogno di registrare i pagamenti e roba lo stesso, ma non sto usando quei log per determinare il credito / il saldo.
Qualche idea? Qual è il modo migliore per implementare questo tipo di sistema?
Modifica
Dopo aver considerato la risposta di @ Ewan, credo che porti un buon punto. Ecco perché vado con l'opzione A, o qualcosa che assomiglia all'opzione A.
Ecco uno schema DB semplificato che ho creato:
Sembra che potrebbe funzionare?