Разработка базы данных для повторяющихся штрафов
У меня есть стол отлично
fine_id amount date fine_type is_rec rec_status
F001 100 2018-12-01 1 TRUE INCOMPLETE
F002 10000 2018-12-02 4 FALSE NULL
и таблица платежей
id fine_id amount paymode txn_id txn_status
1 F002 10000 ONLINE TXN001 1
Штраф может повторяться, т.е. пользователь должен ежемесячно выплачивать сумму штрафа до тех пор, пока его rec_status не будет обновлен администратором как "выполненный".
- В таблице платежей хранятся только успешные платежи, для неудачных платежей я создал отдельную таблицу (все нормально)?
- Как я могу обработать повторяющиеся штрафы в этом сценарии?
- Чтобы проверить, был ли уплачен штраф, я проверяю таблицу платежей, существует ли запись там или нет. Это нормально?
EDIT-1
Прекрасный Мастер
fine_id amount entry_date fine_type is_rec rec_status rec_type
F001 100 2018-12-01 1 TRUE INCOMPLETE Monthly
F002 10000 2018-12-02 4 FALSE NULL
F003 10000 2018-12-02 4 TRUE INCOMPLETE Yearly
хорошо
rec_fine_id fine_id amount for_month for_year is_paid
RF001 F001 100 022018 NULL TRUE
RF002 F003 10000 NULL 2018 TRUE
RF003 F002 10000 NULL NULL TRUE
RF004 F001 100 032018 NULL FALSE
платежи
id rec_fine_id amount paymode txn_id txn_status is_successful pay_date
1 RF001 100 ONLINE TXN001 1 true 2018-02-10
2 RF003 10000 ONLINE TXN010 1 true 2018-10-10
3 RF002 10000 ONLINE TXN011 1 true 2018-07-11
1 ответ
Я бы предложил вам три таблицы: FineMaster
(хранение основной информации о штрафе, независимо от того, завершено ли rec_status или нет. Для штрафа будет только одна запись), Fine
(держащие мелкие детали и имеющие родительскую ссылку на FineMaster), Payment
(хранение информации об оплате за каждое повторение штрафа).
Нет необходимости в отдельных таблицах. Просто есть одна таблица для оплаты. Иметь флаг,
IssuccessfulPayment
, Этот флаг покажет, был ли платеж успешным или нет.Повторяющиеся штрафы могут быть обработаны с помощью
FineMaster
, Обратитесь к первому абзацу в ответе.Я бы посоветовал вам сохранить информацию о регулярных платежах в таблице Fine. Иметь флаг,
IsPaymentCompleted
в таблице Fine. Если для повторяющегося штрафа платеж выполнен успешно, обновите таблицу штрафов, если платеж выполнен успешно. Для одного штрафа также может быть несколько платежей. Я бы посоветовал вам сохранить информацию о регулярных платежах в таблице штрафов.