0

我正在用 ruby​​/rails 设计一个词汇测验应用程序。我有可以工作的基本模型/关联设置,但我担心可扩展性。应用程序中会有一定数量的单词。为简单起见,假设为 100。用户将能够继续提出一个问题,该问题将通过查看他们之前提出的问题而生成。该问题将为定义提供一个单词和 4 个选项(一个是定义,其他三个定义是随机选择的)。

这是我目前建立模型和关联的方式;

class User < ActiveRecord::Base
  has_many :user_questions
end

class UserQuestion < ActiveRecord::Base
  belongs_to :user
  belongs_to :vocab_word
end

class VocabWord < ActiveRecord::base
  has_many :user_question
end

假设我要保留这个基本模型,我应该使用以下哪种方法?

  1. 为每个用户设置一定数量的 UserQuestion 对象 (100),并使用计算列来存储用户在特定单词上的表现的统计信息。(例如,用户 502 尝试了 3 次“干旱”这个词并且正确回答了 2 次)。
  2. 对于每个问题尝试,创建一个新的 UserQuestion 对象。(例如,用户 502 试图猜测“干旱”但不正确)

这些方法中的任何一种都可以扩展吗?如果应用程序有 100 万用户,第一个策略将在 user_questions 中有 1 亿行。第二个可能不止于此。

4

1 回答 1

2

您快到了。我建议您使用以下内容扩展您的模型,并对 UserQuestion 和用户关联进行轻微修正。

class User < ActiveRecord::Base
  has_and_belongs_to_many :user_questions
end

class UserQuestion < ActiveRecord::Base
  has_and_belongs_to_many :users
  belongs_to :vocab_word
end

class VocabWord < ActiveRecord::base
  has_many :user_question
end

class Attempt < ActiveRecord::base
  belongs_to :vocab_word
  belongs_to :user
  belongs_to :user_question

  attr_accessible :result
end

您需要一个 user_questions_users 关联表才能在问题和用户之间建立多对多关联。我相信它将是可扩展的。确保正确设置索引。

于 2013-02-02T21:09:27.167 回答