いずれかの方法で行うことができます:billingoptions
すべての型を包含するフィールドを持つ大きなクラクション テーブル、特定の型に適用されないフィールドの NULL、または親billingoptions
テーブルの「スター オフ」の赤ちゃんテーブルの束。 . どちらにも長所と短所があります。
大きな警笛を鳴らすテーブルのために、
- すべてのデータが 1 つのテーブルで簡単に参照できるのは素晴らしいことです。
- 外部キーの依存関係を追跡し、更新または挿入を実行すると効率的です。
- ただし、将来的に新しい請求オプションを追加するためにテーブル構造を変更する必要があり、データの無効な組み合わせが保存される可能性があります (たとえば、クレジット カードの種類と COD フラグの両方が同じレコードに設定されているなど)。
小さなベビーテーブルの場合、
- データが分割され、プログラムのオブジェクト構造を厳密に反映しているのは素晴らしいことです。
- 他の支払いオプションに影響を与えることを心配することなく、新しい支払いオプションを追加したり、既存のものを変更したりできるのは素晴らしいことです.
- 関係は非常に明確です。外部キーは承認とリンクする必要があるため、誤ってデポジットを別のデポジットにリンクすることはできません。
- しかし、多くの JOIN を必要とする多くのテーブルを設計に導入することになり、ナビゲートするのが面倒になり、挿入と更新に関しては効率的ではなくなります。
仕事では、小さなベビーテーブルを使用することになりました。次のようになります。
テーブルオーダー:
--> OrderId PK
--> (多くの他のフィールド)
テーブル ペイメント:
--> PaymentId PK
--> OrderId (FK) [注文ごとに複数の支払いがある場合があります]
--> PaymentType [制限されたフィールドには次のような値が含まれます
「PAYPAL」または「CREDIT」、これを使用してどちらかを知る
追加を含むことができるルックアップする赤ちゃんテーブル
情報]
テーブル ペイメントPayPal:
--> PaymentPayPalId PK
--> PaymentId FK は Table Payments を指します
--> 取引番号
--> (その他の PayPal 固有のフィールド)
テーブル ペイメントチェック:
--> PaymentCheckId PK
--> PaymentId FK は Table Payments を指します
--> ルーティング番号
--> (その他の e-check 固有のフィールド)
+残りの支払いタイプのその他の表....
すべての支払いタイプは、次の 3 つのトランザクション関連テーブルを共有します。
表 PaymentApprovals:
--> PaymentApprovalId PK
--> PaymentId FK は Table Payments を指します
--> ステータス [「成功」、「失敗」、「取り消し」などを意味するフラグ]
--> ProcessorMessage ['(M) CVV2 Matched' など、サービスが返信したもの]
--> 金額
--> (その他の行政分野)
表 PaymentDeposits:
--> PaymentDepositId PK
--> PaymentApprovalId FK はテーブル PaymentApprovals を指します
--> ステータス
--> ProcessorMessage
--> 金額
--> (その他の行政分野)
表 PaymentRefunds:
--> PaymentRefundId PK
--> PaymentDepositId FK はテーブル PaymentDeposits を指します
--> ステータス
--> ProcessorMessage
--> 金額
--> (その他の行政分野)
すべての支払い方法 (クレジット カード、PayPal、Google チェックアウト、小切手、現金、ストア クレジット、マネー オーダー) は、この承認 --> デポジット --> 払い戻しのメタファーに適合するように抽象化されており、UI は同じメソッドを呼び出します。IPayment
と、IPaymentProcessor
実装が異なるインターフェイス ( CybersourcePaymentProcessor
、PayPalPaymentProcessor
など)。この抽象化は、過去 1 年半にわたってこれらの異なるメソッド間でかなりうまく機能してきましたが、GUI がユーザーに対して異なる言葉遣いを表示することがあります (たとえば、「承認」と「請求」ではなく「承認」と「請求」と表示されます)。クレジットカード決済の「入金」画面、現金入力画面で決裁・入金が一挙に行えます。)
それが理にかなっていることを願っています。実際には支払い情報を保存していないように思えますが、これらがどこに行き着くかを考えると役に立ちます。