支付系统的数据库设计

Kul*_*kur 3 payment logging database-design

我有四个表如下:

费用

fees_id, interest, amount, total_amount, status_id, is_recurring  recurring_status  from_date   to_date      payment_id
    F001     1.50  1000    1015          1          N             NULL              2018-11-01  2018-11-01   1
    F002     2.00  2000    1020          1          Y             COMPLETE          2018-11-01  2018-11-20   2
Run Code Online (Sandbox Code Playgroud)

支付

id, amount,  payment_date, txn_id, bnk_name, txn_status, pay_mode, dd_no, dd_date,   chk_no, chk_date
1   1015     2018-11-11    TXN0001 SBI       1           1         NULL   NULL       NULL    NULL
2   1020     2018-11-20    NULL    NULL      NULL        3         DNO001 2018-11-19 NULL    NULL
Run Code Online (Sandbox Code Playgroud)

付费模式

id  name   display
------------------
1   ONLINE Y
2   CASH   Y
3   DRAFT  Y
4   CHECK  Y
Run Code Online (Sandbox Code Playgroud)

支付状态

id  status  display
-------------------
1   PAID    Y
2   UNPAID  Y
Run Code Online (Sandbox Code Playgroud)

可以通过四种支付方式中的任意一种支付费用。

我有几个问题:

  • (在这种情况下)可以为所有付款模式使用一张付款表吗?还是有更好的选择?
  • 费用可以是定期的(每月支付,直到其定期状态完成)。我该如何处理这些付款?
  • 我是否需要存储每个付款响应(在线付款的情况下),无论成功、失败还是其他。如果是,我应该使用单独的表还是存储在文件中?

Shi*_*kar 5

问:(在这种情况下)可以为所有支付模式使用一张支付表吗?还是有更好的选择?

是的,所有付款都应在一张付款表中。这有助于维持事务完整性约束。此外,它还会对您将来生成各种报告有所帮助

问:费用可以是定期的(每月支付,直到其定期状态完成)。我该如何处理这些付款?

您应该有另一个表来维护定期付款记录作为订阅表,并在记录的每个定期付款事件中将新条目插入付款表中。这样,一条订阅记录就会关联多个支付条目。

问:我是否需要存储每个支付响应(在线支付的情况下),无论成功、失败还是其他。如果是,我应该使用单独的表还是存储在文件中?

是的,您应该将付款响应存储在同一个付款表记录中。这将帮助您进行故障转移检测,并对审核日志提供重大帮助。