用于定期罚款的数据库设计

时间:2018-12-04 05:13:08

标签: database payment recurring-billing

我有一张桌子好

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更新为“完成”为止。

  1. 付款表仅存储成功的付款,对于失败的付款,我做了一个单独的表(可以)吗?
  2. 在这种情况下如何处理经常性罚款?
  3. 要检查是否已支付罚款,我正在检查付款表中是否存在条目。可以吗?

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 个答案:

答案 0 :(得分:0)

我建议您使用三个表:Child(保存有关罚款的主信息,无论rec_status是否已完成。罚款只有一个条目),Child(定期保存)详细信息,并有上级参考FineMaster)FineMaster(保存每次重复发生的付款信息)。

  1. 不需要单独的表。只需一张桌子付款。带有一个标志Fine。该标志将指示付款是否成功。

  2. 可以使用Payment处理经常性罚款。请参阅答案的第一段。

  3. 我建议您在“罚款”表中保留经常性的罚款信息。在Fine表中有一个标记IssuccessfulPayment。如果成功支付了定期罚款,请更新罚款表以确认支付成功。对于一次罚款,也可能需要多次付款。我建议您在“罚款”表中维护经常性的罚款信息。