2011-06-29 7 views
3

ちょうどキチキーです。私はウェブサイトを開発しています。そこでは、クレジットを購入して後でウェブサイト上のものを使うことができます。 私の質問は、ユーザーIDと金額を別々のテーブルにする必要がある(または、それだけで良い)というユーザーのクレジット量(ユーザーテーブル、列クレジット、データベースにクレジットを保存する

おかげ

答えて

4

実際にはです。

これらのクレジットを取得するために通貨取引を行うことを考慮すると、すべての取引のログを取得できるようにする必要があります(国の法律に応じて、これが必要です)。したがって、credits_transactionsテーブルが必要です。

user_id, transaction_id, transaction_details, transaction_delta 

は、プログラム取引の多くのユーザーのためのコストがかかりすぎるだろう、あなたの現在のクレジット残高を計算しているので、あなたも素早くアクセスするため、ユーザーテーブルのcredit_balance行が必要になります。トリガーを使用して、行が挿入されるたびにその列を自動的に更新します。credits_transactions(技術的には、updatedeleteはそのテーブルで許可しないでください)。挿入トリガーのコードは次のとおりです。

CREATE TRIGGER ct_insert 
AFTER INSERT ON credits_transactions 
BEGIN 
    UPDATE users SET credit_balance = credit_balance + NEW.transaction_delta WHERE user_id = NEW.user_id; 
END 
;; 
+0

うん、それは私が最も効率的な方法だろうと思ったまさにです。私はログからのバランスを計算する他のアイデアは非常に遅いだろうと思う、そのサイトの目標を考えて100,000人以上のユーザーを持っていると思う、彼らはトランザクションや日常的に行うだろうということです。 – Tom

+0

しかし、私はまだ1つの質問があります、あなたはトリガーを使用して、あなたは私にこのことについてもう少し詳しく説明できますか? – Tom

+0

あなたのトリガーはクレジットを追加するためだけに機能しますか?支出はどうですか? transaction_deltaのマイナスの値ですか? – Tom

0

私が購入を格納するテーブルを持っており、ユーザIDと、クレジットを買ったと思います。 次に、これに基づいて毎回計算します。インデックスに登録されている場合は速くする必要があります。この方法で簡単に購入履歴を取得できます。

1

別のテーブルに保存する場合は、クレジットの変更ログを保持できます。列に格納する場合は、現在のクレジット数のみが使用されます。

2

クレジットを含むサイトもあります。ユーザーがログインしているときにすべてのページにアクセスする必要があるため、クレジットを含むサイトがあり、ユーザーテーブルに保存するのが最も簡単です。それは単なる整数なので多大な損害を与えません。私は実際にこの値のための新しいテーブルを作成することは、それがインデックスaswelを必要とするため、パフォーマンスが悪化する可能性があると考えています。

すべてのページで必要な情報のユーザーテーブルを作成し、必要なデータをすべてのページで標準化します(例:アドレス情報、説明など)。

編集:他の反応を見て 、

あなたが取引を持っているしたい場合は、彼らがログインするために主にあるように私は別々に保管しますaswelを記録します(またはユーザーがそれらを表示したい場合)。小規模なサイトでは、ログからそれらを即座に計算しても問題ありませんが、パフォーマンスを圧迫する必要がある場合は、実際の値をuserテーブルに保存してください。

1

あなたが今日買ってどのように多くのクレジット

  • のようにクレジット履歴ログの記録を保持したい場合。
  • 昨日どのくらいの費用がかかります。
  • あなたは、私は別のテーブルにこれを置くために、そのより良いと思うクレジット

で何を買いました。このようにして、数学的操作を適用することで、このような結果を得ることができます。

0

クレジットはお金のようです。ユーザーが購入する必要がある場合、はお金です。お金は口座を使用して追跡されます。口座には取引があり、預金および引き出し-および残高です。データベースまたはアカウントのためにSOまたはgoogleを検索します。ここではほんの一例です:

関連する問題