2011-06-25 8 views
3

に我々は現在、我々はこのようなmysqlデータベースでそれを管理している、ローンのための定期的な支払いを追跡するためのWebアプリを持っている:以下の列 [ id, customerId, installmentNo, installmentAmount, penalty, previousOutstanding, totalReceivable, amountReceived ]ローン返済管理のためのデータベース・スキーマ設計

loan_paymentsテーブル次のように次の列を持つ

receiptsテーブルは [ id, loan_payments.id (FK), paymentAmount, otherPaymentDetails]

コードフローは次のとおり

  1. 新規貸出の登録時に、nrInstallments行がその顧客のloan_paymentsテーブルに入力されます。すべての顧客のために10回の分割払いが固定されていると仮定すると、10行は、最初の行(= 1 installmentNo)について
  2. が作成され、penaltypreviousOutstandingは、0新しい支払いが受信されるたびに
  3. に設定されますamountReceivedは、現在の割当額(installmentNo = 1)の額に加算され、paymentsテーブルに入力されます。 *任意の所与の時点でのみONE現在の割賦がある*
  4. 場合次回(= 2 installmentNo)のためにその時、以前の割賦の[ totalReceivable - amountReceived ]次回の(installmentNo = 2)previousOutstandingに挿入されます。以前のすべての支払い/分割払いは凍結されています。そして、顧客には、installmentAmountpenaltyおよびpreviousOutstandingが支払われることを示す忠告が送信されます。
  5. 現在、すべての支払いは現在分割払い(installmentNo = 2)で受領され、新しい支払いを受け取るたびにamountReceivedがインクリメントされます。
  6. すべてのペナルティ計算は、現在の分割払いに対して行われます。

現在、現在のに属していないお支払いは、更新/削除されません。

クライアントが以前の支払いを更新/削除する機能を要求するまで、すべてうまくいっていました。私たちが直面する問題、我々は更新を許可した場合に/前回の支払いの削除

  • なしだとし現在分割払い5、分割払いであれば、ユーザの更新の支払いがない2、previousOutstandingpenalty意志のすべての計算は、次のとおり間違っている。これは意味がありません。

  • 現在、previousOutstandingpenaltyの列を使用しているレポートが多数あります。

私たちのクエリ:

  1. それは、データベース内のpreviousOutstandingpenaltyを格納するための良いデザインですか?それともコードで計算されるべきですか?
  2. 以下を可能にするためにロジック/データベースをどのように再設計しますか? ANY installmentNo
  3. に対する
    1. テイク支払いは更新が/以前のお支払い
    2. 柔軟なペナルティ計算の削除を許可します。 (必要に応じてユーザーから%を取得してください)
    3. 特定の顧客に対して特定の割賦に対してペナルティを免除することはできません。
    4. 可能であれば、どの顧客に対してinstallmentNoに対してどのくらいのペナルティーが免除されたかを報告します。それはしていないだけで、追加の任意の古い行を編集するためにはるかに優れていることを意味する、

答えて

2

は、会計データベースの監査に簡単にする必要があります(この要件は、設計の複雑なを行った場合、我々はそれをドロップすることができます) 。一部の列にあらかじめ計算された集計が含まれている場合は、それらを削除して非正規化し、ビューに入れてレポートが機能するようにします。集計値のスナップショットを使用して送信したメーリングは、別の追加専用テーブルに格納する必要があります。これらをスナップショットとして定義するため、不正確になることはありません。

+0

合意。私は同じ分割を参照する別々の記録として変更を記録するでしょう。新しい記録に従って未払いおよびペナルティ残高を調整することができます。 –

関連する問題