2

PHP / MySQLで仮想クレジットシステムを構築するための最良の方法は何ですか?

明らかに、トランザクション(借方/貸方)ごとに1つのテーブルが必要です。そのテーブルに次の列が必要になると思います。

  • TransactionID(自動インクリメントで1から始まる一意のトランザクションID)

  • UserID(メインのUsersテーブルからのユーザーの一意のID)

  • Type(獲得、購入、使用など)

  • ItemID(アイテムに費やした場合)

  • Amount(正または負)。

質問:

1)このテーブルに他の列が必要ですか?

2)この目的のために他のテーブルが必要ですか?

たとえば、各ユーザーの合計を追跡するために別のテーブルが必要ですか?または、各ユーザーの合計をすべてのトランザクションの合計として単純に計算しますか?

最初は、このクレジットシステムは純粋に「プレイマネー」になりますが、将来的には「クレジットの購入」オプションを追加する予定なので、サードパーティの支払い処理業者の一意のトランザクションIDの列を追加する必要がありますか?または、購入したクレジット用に別のテーブルを作成し、スクリプトを使用して2つを結び付ける必要があります(たとえば、合計クレジット=獲得したクレジット+購入したクレジット-使用済みのクレジット)。

上記の質問に答えるだけでなく、これまでにこのようなプログラムを作成したことがないため、これを実行する方法に関する特定の記事へのリンクを含め、あらゆる洞察とアイデアをいただければ幸いです。

ありがとう!

4

2 に答える 2

4

いくつかのメモ。

金融を扱うしっかりしたシステムを構築したいのであれば、金融の世界からのいくつかの基本的な概念を使用することは理にかなっていると思います。すべてのアカウンティング機能を完全に実装する必要があるとは言いたくありませんが、多くのことが私には合理的であるように思われます。

まず、金融取引では、ある口座から別の口座にお金を移動する必要があるため、代わりにuser_idを使用しますaccount_id。各ユーザーは複数のアカウントを持っている場合があり、各アカウントにはタイプ(ルックアップ)と通貨があります。また、「ユーザー」という用語は避け、「パーティ」(パーティ-役割-関係モデル)を優先します。

第二に、常に少なくとも2つの関係者が関与しています。お金はあるアカウントから別のアカウントに移動します。アイテム購入の場合、個人の口座残高が減少し、組織の口座残高が増加します。

また、私は使用しませんitem_idが、のようなものを使用しますevent_id。各トランザクションは、1つのビジネスイベントに関連付けられています。イベントは、システムで発生する可能性のあるさまざまなイベントの共通の親テーブルです。それぞれEventの詳細テーブルには、イベントタイプに固有の情報が含まれます。たとえば、、などを使用できpurchase_eventますdeposit_event

テーブルは多くの(場合によっては数千の)挿入の対象であるためtransaction、アカウントの残高が必要になるたびにテーブルを照会することはありません。account連結バランスを表に保つことは理にかなっています。

それが理にかなっていることを願っています。

于 2012-05-21T15:13:02.173 に答える
0

システムが何をすべきかを本当に理解していない限り、データベースのアーキテクチャについて何かを言うのは難しいです。しかし、私はまだ試みます。

1つのテーブルにそれほど多くの情報を格納するのは良い考えではないと思います。

私はこの方法でもっとうまくやったでしょう- transactions(id, user_id, amount, timestamp)、この表には各支払いに関する最小限の情報が含まれています。

他のすべては、たとえばtransactions_types(transaction_id, type)transactions_items(transaction_id, item)

クレジットについて。購入した通貨が同じである場合は、トランザクションのタイプをもう1つ追加し、必要に応じてテーブルをとして追加しますtransactions_psid(transaction_id, psid)

通貨が異なる場合、すべてはシステムの負荷に依存します。レコードが多すぎるまで、一意のtransaction_idを持つテーブルを1つだけ持つのが適切です。

于 2012-05-21T15:26:07.857 に答える