2

ユーザーは、ユーザーごとに異なるカスタム請求レートを使用することができます。データベース設計:カスタム料金/請求料金

あなたは顧客が請求書など、彼らに送信することがあります充電し、その後、あなたが課金記憶するテーブルを持っている場合あなたが最も可能性の高いデフォルトの課金料金テーブルを持って、それがこの

FEE 
Id 
FeeTypeId 
FixedCharge 
VariableCharge 

ようになります/料金はこのように見えるかもしれません!

USER_TRANSACTION_CHARGE 
Id 
UserId 
FeeId 
ChargeName 
ChargeAmount 
DateTime 

特定のユーザーあたりのカスタム請求レートについてはどのように設計していますか?

+0

USER_TRANSACTION_CHARGEが最適ではない配置をしているようです。可変料金/固定料金が料金に保存されていて、U_T_Cのエントリに1つの料金が含まれている場合は、なぜChargeAmountもそこに保存しますか? U_T_CがFeeテーブルから複数のエントリを表していれば意味があります。 –

+0

いいえ!、請求額は請求額、FEE表では固定料金$ 0.50、変動費1%、購入項目は$ 100.00で、USER_TRANSACTION_CHARGEには課金額は$ 100x0.01 + $ 0.50 = $ 1.50です。購入アイテムが500ドルの場合、 "ChargeAmount"は$ 5.50 – 001

答えて

1

FEEテーブルに履歴があるように見えません。 7年または10年前までに請求書を作成することができるのは、一般的な法的要件です。 FEEレコードが変更される可能性があります。そのため、請求書テーブルのリンク(feeid)はどうなりますか?

FEE: Id, FeeTypeId, FixedCharge, VariableCharge 
USER_FEE: Id, UserId, FeeTypeId, FixedCharge, VariableCharge 

特定のユーザーのFEEテーブルを「オーバーレイする」USER_FEEテーブルを作成できます。したがって、FeeTypeIdごとに、ユーザーはUSER_FEEにオーバーレイを表示したり、FEEに戻ったりする可能性があります。

USER_TRANSACTION_CHARGEについては、FeeId + DateTimeがリンクするFEEに対する履歴を保持していない限り、そこのリンク列FeeIdに真剣に挑戦します。私はChargeNameが何とかFeeTypeIdにリンクされていると仮定だけ

Id, UserId, ChargeName, ChargeAmount, DateTime 

にそのテーブルをドロップするのでしょうか? そしてChargeAmountはFixed/VariableChargeから解決されたものです

本質的に、(USER_)FEEテーブルは値を検索するために使用されますが、値を超えて( USER_)FEEテーブル。これは、バージョン管理のないシンプルなシステムのようです。

+0

興味深いことに、あなたがバージョン管理/履歴のポイントを持ち上げたのは良いことです。法的な理由からこれを行う必要があります!これを行うには、FEEおよびUSER_FEEテーブルに「DateTime」フィールドを追加して、FeeTypeの最新のDateTimeを取得して解決します。 – 001

+1

法的要件は、請求書を忠実に再現できることです。充電の根拠としては、それほど厳格ではないので、充電を作成した歴史的な "フォーミュラ"を知らなくても逃げることができます。はい、バージョン管理されたFEEテーブル(Id、DateTime、FeeTypeId)は、ルックアップ(datetime desc)の最後の2つをUSER_TRANSACTION_CHARGEのリンクとして使用できるようにします。 – RichardTheKiwi

0

デフォルト料金は、実際に請求された料金とは独立している必要があります。したがって、User_Transaction_ChargeはFeeID外部キーを失う必要があります。

User_Transaction_Chargeの生成に使用するコンポーネントを保存する必要がある場合は、そのコンポーネントをChargeまたは別のエンティティとして保存します。

DEFAULT_FEE 
Id 
UserId 
FeeTypeId 
FixedCharge 
VariableCharge 

USER_TRANSACTION_CHARGE 
Id 
UserId 
ChargeName 
ChargeAmount 
DateTime 

USER_TRANSACTION_CHARGE_FEE 
Id 
UserTransactionChargeId 
FixedAmount 
VariableRate 

または

USER_TRANSACTION_CHARGE 
Id 
UserId 
ChargeName 
ChargeAmount 
FixedAmount 
VariableRate 
DateTime 
1

デフォルトの手数料のテーブルを維持し、相互参照を一覧表示し、ユーザ、feeType、およびオーバーライドを追加します。請求時には、解決策(http://database-programmer.blogspot.com/2008/04/advanced-table-design-resolutions.html)で料金を決定します。そのブログエントリは実際には時間請求システムをその例として使用しますが、あなたがやっていることに近い。

偽の正規化に注意してください。実際の料金を具体化し、請求書に永久保存する必要があります。これは、請求書が作成された時点で、実際の請求額が取引に関する歴史的事実となり、そのように保存するために非正規化されていないためです。外部キーは、手数料を得る目的ではなく、明細/活動/手数料タイプを識別するためにのみ存在し、料金は請求書に保存され、永遠に保管されます。

+0

はい、そうです! (インボイスに保存する) – 001

関連する問題