我正在开发一个PHP应用程序,它有几个可以评论的对象。每个评论都可以投票,用户可以给它+1或-1(如Digg或Reddit)。现在我正计划有一个带有user_id和投票信息的“投票”表,这似乎工作正常。
问题是,每个对象都有数百条注释存储在单独的注释表中。加载评论后,我必须统计选票,然后单独检查每个投票对用户,以确保他们只能投票一次。这可行,但看起来真的是数据库密集型 - 很多只是评论的查询。
是否有一种更简单的方法可以减少数据库密集度?我当前的数据库结构是最好的方法吗?
更清楚当前的数据库结构:
评论表:
投票表:
结束目标:
答案 0 :(得分:9)
为了确保每个选民只投票一次,请使用这些字段设计您的投票表 - CommentID,UserID,VoteValue。使CommentID和UserID成为主键,这将确保一个用户只获得一票。然后,要查询投票以获得评论,请执行以下操作:
SELECT SUM(VoteValue)
FROM Votes
WHERE CommentID = ?
这有帮助吗?
答案 1 :(得分:0)
为什么不为每条评论保存总票数?在新投票发生时增加/减少。
然后你必须检查用户是否已经专门为此评论投票,以便每个用户每个评论只允许一次投票。
答案 2 :(得分:0)
您可以设置一个sql join条件,该条件返回当前用户对此对象所做的评论的所有投票,如果没有行,则表示用户尚未投票。这与您在程序中逐一检查每条评论略有不同。
就数据库结构而言,将这些事物分开似乎是完全符合逻辑的。 vote {user_id,object_id,object_type,vote_info ...)
你可能已经这样做了,很抱歉,如果是这种情况,我无法向你解释。