如何构建分类投票数据库?

时间:2011-11-12 13:02:31

标签: mysql ruby-on-rails database database-design voting

我对如何构建数据库有疑问。我有一个reddit'esque投票系统。物品可以获得投票。但每个项目属于一个主题,每个主题属于一个类别。虽然只有项目可以获得投票,但我希望能够访问主题内和类别中的投票数。有关如何完成此任务的任何建议?

我看到了4种主要方法:

  1. 取消规范化投票并将投票存储在项目表,主题表和类别表中的属性中。然后,无论何时发生投票/投票,我都需要更新所有3个。
  2. 创建单独的“投票”模型。投票属于项目,项目属于主题,主题属于类别。然后,只要我需要访问任何内容,我就可以通过链查询投票数。
  3. 只需要物品和投票。项目将具有类别和主题属性..然后我将查询主题中的项目并计算对它们的投票..
  4. 学习使用NoSQL数据库系统。
  5. 额外信息:我正在使用Rails,目前我只知道MYSQL。这是我应该学习像Mongo这样的东西吗?这只能通过Hadoop实现吗?我可以在MySQL中完成此任务。谢谢!

2 个答案:

答案 0 :(得分:1)

  

创建单独的“投票”模型。投票属于物品,物品   主题和类别主题。然后我可以查询数量   每当我需要访问任何东西时,都会通过链条投票。

这是做你正在谈论的最灵活的方式。

  

学习使用NoSQL数据库系统。

不适合您当前的项目。

  

这是我应该学习像Mongo这样的东西吗?

没有

  

这只能通过Hadoop实现吗?

没有。任何SQL数据库都可以这样做。任何SQL数据库是否可以管理您正在计划的任何内容都是一个不同的问题。不同的平台规模不同。

  

我可以在MySQL中完成此任务。

是的,很容易。

答案 1 :(得分:1)

我认为你应该选择2。

无论如何,您需要创建一个投票模型,因为您可能希望限制用户对每个项目进行一次投票。

如果以后出现性能问题,您可以随时缓存项目,主题或类别中的投票数。

如何更新这些数字应该仔细考虑。对自动更新上述所有数字的投票触发器可能会导致写入操作过多。另一种方法可能是定期运行统计存储过程。

无论如何,真正的观点是 - 在您知道存在问题之前不要进行优化