複数の支払いゲートウェイを処理するためのスキーマ設計


9

これは、フィードバックが必要な質問の詳細です。複数の支払いゲートウェイを処理するデータベースを設計しています。支払いゲートウェイは、ほとんどの場合、支払いを行う前に注文詳細のテーブル(これはすべてのPGに共通)と、支払いを行った後の応答を保存するためのトランザクション詳細のテーブルを必要とします。

ここで、複数の支払いゲートウェイを処理するために、単一のトランザクションテーブルを保持し、すべての支払いゲートウェイから利用可能なすべてのフィールドと、その行のPGを示すフィールドを詰め込むことができます。
それとも、私のような接頭辞でPGごとに別のトランザクションテーブルを作成することができpaypal_たりbank_、それぞれがそれらのそれぞれが必要なフィールドを持つ、など。

どちらがより最適な方法であるかはわかりません。また、将来遭遇する可能性のある同様のシナリオについても学習する必要があります。


それはあなたの正確な状況に依存します。一般に、1つの大きなテーブルのサブセットを選択する方が、多くの小さな小さなテーブルをUNIONとマージするよりも安上がりです。ただし、小さなテーブルの設計がうまく機能する状況もあります。
Walter Mitty

これまでに何を持っていますか?
アーロン

@ BryceAtNetwork23今のところ、2つのPGを処理していて、両方に別々のテーブルがあります。しかし、将来的にはPGを追加する必要があります。毎回テーブルを追加し続けなければならないので、これを続けるべきかどうか考えていました。テーブルの数を増やすか、列とレコードの数を増やす1つのテーブルを選択します。少し混乱しています。
Bibhas

@Bibhas、あなたが使用したソリューションを私たちと共有することは可能ですか?私にも同じ疑問があります。
Marcio Mazzucato 2014年

@MarcioSimao paypal_transaction_idでは、bank_transaction_idなどのプロパティを持つ単一のテーブルを使用しました。支払いゲートウェイが多すぎなかったため、うまくいきました。多くのPGをサポートするユーザーとは連携しない場合があります。
Bibhas 14年

回答:


7

それは、支払いタイプ間でデータがどの程度異なるかに依存します。

私が職場でサポートしているサイトの場合、すべての支払いタイプのデータを格納する1つのテーブルがあります。私たちの支払いタイプは基本的に4種類のクレジットカードと会社の発注書であるため、これは私たちにとってはうまくいきます。ほとんどのお客様はクレジットカードで支払いますので、データに大きな違いはありません。もちろん、これらのクレジットカードの顧客に対するクエリでは、常にPONumberフィールドにNULL値が返されます。同様に、PO顧客のクエリでは、クレジットカード関連のすべてのフィールドでNULLが生成されます。

データにさまざまなフィールドがたくさんある場合は、支払いゲートウェイごとに個別のテーブルを持つ1つのマスタートランザクションテーブルを試すことができます。各ペイメントゲートウェイタイプのテーブルには、transaction_idという外部キーがあり、マスタートランザクションテーブルにリンクされます。

一方、すべての支払いゲートウェイタイプに同様のフィールドがある場合、1つのトランザクションテーブルを使用します。


1
それを片付けてくれてありがとう。私の目の前だったと思いますが、誰かに指摘してもらう必要がありました。:)
Bibhas

@ BryceAtNetwork23、5つ以上など、ゲートウェイが多い場合、データを取得するのが難しいと思いますか?マスタートランザクションテーブルは、各支払いゲートウェイタイプで多くの左結合を行わなければならないので、これを求めています。
Marcio Mazzucato 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.