我們有一個web應用程序,用於跟蹤定期付款的貸款,目前我們正在這樣的管理是在MySQL數據庫:有以下的列數據庫架構設計用於償還貸款管理
loan_payments
表 [ id, customerId, installmentNo, installmentAmount, penalty, previousOutstanding, totalReceivable, amountReceived ]
receipts
表有以下的列 [ id, loan_payments.id (FK), paymentAmount, otherPaymentDetails]
代碼流程如下:
- 創建新貸款期間,nrInstallments行被輸入該客戶的
loan_payments
表中。 假設有固定10個分期付款爲所有客戶,10行,將創建 - 對於第一行(
installmentNo
= 1)時,penalty
和previousOutstanding
將被設置爲0。 - 每當接收到一個新的付款,在當前分期付款(
installmentNo
= 1)amountReceived
增加了該數額,並在payments
表中完成一個條目。 *在任何給定時間只有ONE流裝置* - 當它的時刻爲下一期(
installmentNo
= 2),上一期的[ totalReceivable - amountReceived ]
插入到下一期的(installmentNo
= 2)previousOutstanding
。所有以前的付款/分期付款都被凍結。並向客戶發送暗示,要求支付installmentAmount
,penalty
和previousOutstanding
。 - 現在所有付款都將從當前分期付款(
installmentNo
= 2)收到,並且每當收到新付款時,其接收的金額都會增加。 - 所有的罰款計算將完成對當前分期付款。
目前我們不提供任何不屬於當前分期付款的更新/刪除。
一切工作正常,直到客戶要求更新/刪除以前的付款功能。以下是我們將面臨的問題,如果我們允許更新/刪除之前的付款
假設的當前分期付款沒有爲5,如果用戶更新付款與分期付款無2,
previousOutstanding
和penalty
所有的計算將是錯的。這是沒有意義的,因爲暗示已經發送給客戶。目前有很多報告使用
previousOutstanding
和penalty
列。
我們的疑問:
- 是好設計,存儲在數據庫中
previousOutstanding
和penalty
?還是應該在代碼中計算? - 我們如何重新設計邏輯/數據庫以允許以下內容。
- 對任何 installmentNo
- 採取支付允許更新/刪除任何先前的付款
- 靈活的罰款計算的。 (如果需要,從用戶處取得%)
- 能夠免除特定客戶對特定分期付款的罰款。
- 如果可能的話,報告顯示針對給定客戶的哪些分期付款沒有扣除多少罰款。 (如果這個要求使得設計複雜,我們就可以讓它)
同意。我將把修改記錄爲引用同一批的單獨記錄。您可以根據新記錄調整未付餘額和罰金餘額。 –