Я храню историю и версии всего.
То есть:
- Как хранить сумму денег на счете ? Отдельным числом или каждый раз пересчитывать доходы и расходы ?
clients: id | name | surname | email |
&etc(различные другие поля) |
plan_id(или planPrice) |
budget(до последней оплаты) | totalBudget(за все время)
payment: история платежей
id | client_id| date |
&etc(различные другие поля) |
revision(если в процессе стоимость или условия услуги поменялись) |
price |
pay (оплачено или нет, 0 или дата платежа)
- Как хранить дохоы, расходы клиента ?
также и с ними
sale: история взносов
id | client_id| date |
&etc(различные другие поля) |
summ (какая сумма)|
refund (внесено или нет, 0 или дата платежа) |
type (метод оплаты, Paypal, наличность, банк &etc)
- Как часто "актуализировать" сумму биллинга ? Будут огромное количество мелких транзакций, условно 1000 штук в секунду по 0.0000000001$.
С этим сложнее, но в высоконагрузочных проектах, надо базу сбрасывать, иначе зарастешь
К примеру собирать транзакции и раз в сутки, в час, 5минут (нужное подчеркнуть) сбрасывать в архив или удалять создавая запись о полученных(неоплаченных средствах)
transaction: история транзакций
id | client_id| date | date_start | date_end | archive_date_or_id |
&etc(различные другие поля) |
summ | count |
pay (выплачено или нет, 0 или дата платежа)