【问题标题】:How to structure a categorized voting database?如何构建分类投票数据库?
【发布时间】:2011-12-27 14:57:07
【问题描述】:

我有一个关于如何构建数据库的问题。我有一个 reddit 式的投票系统。物品可以获得投票。但是每个项目都属于一个主题,每个主题都属于一个类别。虽然只有项目可以获得投票,但我希望能够访问主题和类别中的投票数。关于如何做到这一点的任何建议?

我看到了 4 种主要的方法:

  1. 对投票进行反规范化并将投票存储在项目表、主题表和类别表的属性中。然后,每当发生投票/否决时,我都需要更新所有 3 个。
  2. 创建一个单独的“投票”模型。投票属于项目,项目属于主题,主题属于类别。然后我可以在需要访问任何内容时通过链查询投票数。
  3. 只要有项目和投票。项目将具有类别和主题属性..然后我会查询主题中的项目并计算对它们的投票..
  4. 学习使用 NoSQL 数据库系统。

额外信息:我正在使用 Rails,目前我只真正了解 MYSQL。这是我应该学习像Mongo这样的东西的时候吗?这真的只能通过 Hadoop 来实现吗?我可以在 MySQL 中完成此操作吗?谢谢!

【问题讨论】:

  • 我对您的工具了解不多,无法回答您的问题,但从数据库的角度来看,选项 2 是唯一明智的解决方案。这种类型的东西正是 RDBMS 的用途。

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


【解决方案1】:

我认为你应该选择选项 2。

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

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

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

无论如何,真正的重点是 - 在知道有问题之前不要优化

【讨论】:

    【解决方案2】:

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

    这是执行您所说的最灵活的方式。

    学习使用 NoSQL 数据库系统。

    不适用于您当前的项目。

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

    没有。

    这真的只能通过 Hadoop 来实现吗?

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

    我可以在 MySQL 中完成此操作吗?

    是的,很容易。

    【讨论】:

      猜你喜欢
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多