php - 处理社交新闻网站上的赞成/反对票

标签 php mysql database database-design

我正在尝试从头开始制作一个类似 reddit 的 Web 应用程序。 我不知道如何存储赞成票和反对票。

我正在考虑创建一个名为“user_votes”的表 包含字段“id”、“user_id”、“voted_link_id”、“up_or_down”

因此,每次用户投票时,它基本上都会添加一行“谁对什么进行了投票”。

我要插入一个新行,而不是仅添加 1 行,因为用户个人资料页面必须显示用户投票的链接列表。所以我需要跟踪每一张选票。但我觉得效率不高。

我不熟悉严重依赖数据库的Web应用程序。 请指导我。

附言 哪些列应该被索引?

最佳答案

实际上你两者都想要。

您的表必须包含 Article_ID、User_ID、+1 或 -1。这正是您所说的原因。您需要将用户的投票显示为运行帐户。您还可以使用它来确保唯一性。

您现在必须考虑频率。文章的查看频率将高于投票频率。因此,您必须在 Vote 表上执行大量 SUM,从而生成完全相同的值。

相反,您应该在文章表上保留两个计数器:赞成票总数和反对票总数。两个的原因是,总和无关紧要,因为两个值位于同一行。其次,您可能想要实现一些像 SO 那样公开这些值的东西。 (除非您获得这么多积分(大约 1500),否则您无法看到这一点)。

您可能想要显示文章列表以及每篇文章的总分...您不想对一长串文章的投票表进行求和。您可能还希望允许人们对文章设置限制,“只显示超过 +10 的文章”。同样,您不想每次有人打开主页时都对投票表进行求和。

关于php - 处理社交新闻网站上的赞成/反对票,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5071409/

相关文章:

php - 缺少提交按钮

mysql - 按列的顺序方式选择sql中的行

mysql - 如何在 MySQL 中使用前缀索引进行仅索引扫描

mysql - 批处理文件摆脱了输出中的迭代器编号

C++ Qt sqlite 数据库连接问题

php - 使用 PHP 查询更新数据库中的个人资料详细信息

php - opentbs同时合并Word文档表中的2行

PHP if else 回显

database - 过滤掉单个资源的最有效方法是什么?

database - 内存中的整个 Oracle 数据库