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

Php 评论投票数据库结构的最佳实践,php,mysql,comments,voting,Php,Mysql,Comments,Voting,我正在开发一个PHP应用程序,它有几个可以评论的对象。每个评论都可以投票,用户可以给它+1或-1(比如Digg或Reddit)。现在,我正计划创建一个“投票”表,该表包含用户id和他们的投票信息,看起来效果不错 问题是,每个对象都有数百条注释,这些注释存储在单独的注释表中。在我加载评论之后,我必须对投票进行统计,然后针对用户单独检查每个投票,以确保他们只能投票一次。这是可行的,但似乎真的是数据库密集型的——大量的查询只是为了注释 有没有一种更简单的方法可以减少数据库占用?我当前的数据库结构是最好

我正在开发一个PHP应用程序,它有几个可以评论的对象。每个评论都可以投票,用户可以给它+1或-1(比如Digg或Reddit)。现在,我正计划创建一个“投票”表,该表包含用户id和他们的投票信息,看起来效果不错

问题是,每个对象都有数百条注释,这些注释存储在单独的注释表中。在我加载评论之后,我必须对投票进行统计,然后针对用户单独检查每个投票,以确保他们只能投票一次。这是可行的,但似乎真的是数据库密集型的——大量的查询只是为了注释

有没有一种更简单的方法可以减少数据库占用?我当前的数据库结构是最好的方法吗

要更清楚地了解当前数据库结构,请执行以下操作:

评论表:

  • 用户id
  • 对象id
  • 总票数
投票表:

  • 注释\u id
  • 用户id
  • 投票
最终目标:

  • 允许用户在每个评论上只投票一次,至少有#个MySQL查询(每个对象有多个评论)

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

SELECT SUM(VoteValue)
FROM Votes
WHERE CommentID = ?

这有帮助吗?

为什么不保存每条评论的总投票数?在进行新的投票时增加/减少该值


然后,您必须检查用户是否专门对此评论进行了投票,以便每个用户只允许对每个评论进行一次投票。

您可以设置sql连接条件,该条件返回当前用户对此对象所做评论的所有投票,如果您没有获得任何行,则表示用户尚未投票。这与您在程序中逐个检查每个注释略有不同

就数据库结构而言,将这些内容分开似乎是完全合乎逻辑的。投票{用户id、对象id、对象类型、投票信息…)


你可能已经这样做了,抱歉,但如果是这样的话,我无法从你的帖子中解释。

技巧是第二部分,检查用户是否对该特定评论投了票-这基本上会导致有一个单独的投票表。实际上这很有帮助,谢谢!我甚至没有想到有两个主键。。