2

2 つのテーブルがあり、1 つは記事とそれが受け取った投票数を格納するものです。

| article_id | visitor_votes | member_votes | voting_opened |
-------------------------------------------------------------
| 1          | 12            | 394          | Y             |
| 3          | 94            | 5821         | Y             |

また、どのユーザーがどの記事に投票したかを追跡する別のテーブルもあります

| vote_id | user_id | article_id | date    |
--------------------------------------------
| 1       | 12      | 1          | 7/28/2012
| 2       | 23      | 3          | 7/28/2012

1 人のユーザーは、トランザクションごとに 1 票しか投票できません。私は現在、レコードが投票テーブルに挿入されるたびに、記事テーブルの投票数を増やすトリガーを使用しています。これは良い習慣ですか、それとも自分のアプリケーション (PHP Web ベースの Web サイト) でこれを行うべきですか? また、特定の投票数 (voting_opened = N) の後で投票を停止したいのですが、トリガーを使用して合計投票数 (visitor_votes + member_votes >= 6000) を確認し、記事の行を更新して Voting_opened = N に設定する必要がありますか? それとも、これは私のアプリケーションでも行うべきことですか? おそらく数百の記事に対して数千の投票があり、更新が十分に速く更新されなかったために投票数がしきい値を超えるケースに遭遇したくないため、スケーラブルなソリューションが必要ですまたは何でも。

ありがとうございました!

4

1 に答える 1

1

どちらのソリューションも有効であり、同じように機能するはずです。

あなたはアプリケーションでこのようなことを試すことができます

UPDATE articles SET 
    visitor_votes = visitor_votes + 1
    voting_opened = IF(visitor_votes + member_votes >= 6000, 'N', 'Y')
WHERE 
article_id = xxxx
AND voting_opened = 'Y'

次に、影響を受ける行を確認し、それが0より大きい場合は、投票テーブルに行を挿入します。

于 2012-07-29T02:28:04.840 に答える