6

個別の料金と定期的な料金(サブスクリプション)を処理する課金システムがあります。

2つのSQLテーブルがあります。

StandardCharges
RecurringCharges

StandardChargesテーブルには、その月に顧客が購入した個々のアイテムが保持されます。

RecurringChargesテーブルは、日付ごとに請求される定期的なアイテムを保持します。時が来ると、システムは自動的にrecurリクエストを作成し、StandardChargesテーブルに行を追加し、RecurringChargesテーブルで日付ごとに料金を翌月に増やします。

月末に、StandardChargesテーブルから各顧客の合計値を取得し、請求書を作成します。

これを行うためのある種のデザインパターンまたは別の方法はありますか?これは正しいデータベース設計ですか?理想的には、すべての料金を1つのChargesテーブルに保持し、そこからの定期的な料金も管理したいですか?

ありがとう

4

2 に答える 2

2

あなたのデザインは確かに正しいと思います。

実世界の用語でデータを考える場合、「可能性のある」トランザクション(つまり、まだ発生しておらず、おそらく顧客がクレジット制限を超えたために実現しない可能性のあるトランザクション)をコミット済みの実際のトランザクションと混合することは意味がありません。 。

データを単一のテーブルにマージすると、特別なフィルタリング基準を適用し、TransactionCompletedやTransactionIsFutureChargeなどの追加のメタデータを保存する必要があるため、レポート作成が困難になる可能性もあります。

私が提案をする場合、StandardChargesそれは、それが保持するデータに近いもの、CompletedTransactionsおよびのRecurringTransactionsようなものに名前を変更することになりPendingTransactionsます。

于 2012-07-20T08:05:07.467 に答える
0

現在のデザインは私には合理的なようです。ただし、2つのテーブルをマージする場合は、IsRecurring、IsFuture、IsScheduledなどのBIT列を追加するだけで、RecurringChargesで発生する料金を指定できます。その後、定期的な請求で期日が到来した場合は、別のテーブルではなく、同じテーブルに挿入するだけです。請求書については、クエリに条件を追加するだけで、BIT列が設定されている料金を除外できます。

于 2012-07-19T21:44:22.870 に答える