评论投票数据库结构的最佳实践

mdo*_*lon 7 php mysql comments voting

我正在开发一个PHP应用程序,它有几个可以评论的对象.每个评论都可以投票,用户可以给它+1或-1(如Digg或Reddit).现在我正计划有一个带有user_id和投票信息的"投票"表,这似乎工作正常.

问题是,每个对象都有数百条注释存储在单独的注释表中.加载评论后,我必须统计选票,然后单独检查每个投票对用户,以确保他们只能投票一次.这可行,但看起来真的是数据库密集型 - 很多只是评论的查询.

是否有一种更简单的方法可以减少数据库密集度?我目前的数据库结构是最好的方法吗?

要更清楚当前的数据库结构:

评论表:

  • 用户身份
  • OBJECT_ID
  • total_votes

投票表:

  • COMMENT_ID
  • 用户身份
  • 投票

最终目标:

  • 允许用户仅使用最少的MySQL查询(每个对象有多个注释)对每个注释只投票一次

小智 9

要确保每个选民只投票一次,请使用这些字段设计您的投票表 - CommentID,UserID,VoteValue.使CommentID和UserID成为主键,这将确保一个用户只获得一票.然后,要查询投票以获得评论,请执行以下操作:

SELECT SUM(VoteValue)
FROM Votes
WHERE CommentID = ?
Run Code Online (Sandbox Code Playgroud)

这有帮助吗?