に我々は現在、我々はこのようなmysqlデータベースでそれを管理している、ローンのための定期的な支払いを追跡するためのWebアプリを持っている:以下の列 [ id, customerId, installmentNo, installmentAmount, penalty, previousOutstanding, totalReceivable, amountReceived ]
ローン返済管理のためのデータベース・スキーマ設計
loan_payments
テーブル次のように次の列を持つ
receipts
テーブルは [ id, loan_payments.id (FK), paymentAmount, otherPaymentDetails]
コードフローは次のとおり
- 新規貸出の登録時に、nrInstallments行がその顧客の
loan_payments
テーブルに入力されます。すべての顧客のために10回の分割払いが固定されていると仮定すると、10行は、最初の行(= 1installmentNo
)について - が作成され、
penalty
とpreviousOutstanding
は、0新しい支払いが受信されるたびに - に設定されます
amountReceived
は、現在の割当額(installmentNo
= 1)の額に加算され、payments
テーブルに入力されます。 *任意の所与の時点でのみONE現在の割賦がある* - 場合次回(= 2
installmentNo
)のためにその時、以前の割賦の[ totalReceivable - amountReceived ]
次回の(installmentNo
= 2)previousOutstanding
に挿入されます。以前のすべての支払い/分割払いは凍結されています。そして、顧客には、installmentAmount
、penalty
およびpreviousOutstanding
が支払われることを示す忠告が送信されます。 - 現在、すべての支払いは現在分割払い(
installmentNo
= 2)で受領され、新しい支払いを受け取るたびにamountReceivedがインクリメントされます。 - すべてのペナルティ計算は、現在の分割払いに対して行われます。
現在、現在のに属していないお支払いは、更新/削除されません。
クライアントが以前の支払いを更新/削除する機能を要求するまで、すべてうまくいっていました。私たちが直面する問題、我々は更新を許可した場合に/前回の支払いの削除
なしだとし現在分割払い5、分割払いであれば、ユーザの更新の支払いがない2、
previousOutstanding
とpenalty
意志のすべての計算は、次のとおり間違っている。これは意味がありません。現在、
previousOutstanding
とpenalty
の列を使用しているレポートが多数あります。
私たちのクエリ:
- それは、データベース内の
previousOutstanding
とpenalty
を格納するための良いデザインですか?それともコードで計算されるべきですか? - 以下を可能にするためにロジック/データベースをどのように再設計しますか? ANY installmentNo
- に対する
- テイク支払いは更新が/以前のお支払い
- 柔軟なペナルティ計算の削除を許可します。 (必要に応じてユーザーから%を取得してください)
- 特定の顧客に対して特定の割賦に対してペナルティを免除することはできません。
- 可能であれば、どの顧客に対してinstallmentNoに対してどのくらいのペナルティーが免除されたかを報告します。それはしていないだけで、追加の任意の古い行を編集するためにはるかに優れていることを意味する、
合意。私は同じ分割を参照する別々の記録として変更を記録するでしょう。新しい記録に従って未払いおよびペナルティ残高を調整することができます。 –