在什么情况下我应该使用DB触发器?

时间:2012-07-29 02:02:25

标签: mysql database triggers

我有两个表,一个存储文章和收到的票数:

| 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

一个用户每个交易只能投一票。我目前使用一个触发器,每次将记录插入到投票表中时,该触发器会增加articles表中的投票数。这是一个好的做法,还是我应该在我的应用程序(PHP基于Web的网站)中这样做?我还希望在一定数量的投票(voting_opened = N)之后停止投票,我是否应该使用触发器检查总票数(visitor_votes + member_votes> = 6000)然后更新文章行以设置voting_opened = N?或者这也是我应该在我的应用程序中做的事情?我需要一个可扩展的解决方案,因为我可能会有数百篇文章投票,而且我不想遇到投票数超过阈值的情况,因为更新速度不够快管他呢。有人可以对这种情况有所了解吗?

谢谢!

1 个答案:

答案 0 :(得分: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在投票表中插入行。