Ruby on rails 3 Rails 3中一个AR模型内的多个数据库表

Ruby on rails 3 Rails 3中一个AR模型内的多个数据库表,ruby-on-rails-3,activerecord,Ruby On Rails 3,Activerecord,我被要求做一些报告(记录)服务。该员工在许多公司的本地安装了web应用程序(只是一些用PHP编写的动态网站)。这个web应用程序是一种调查。所有数据都保存在本地数据库中,但现在的要求是,每次表单提交后,这些数据(调查结果)也将发送到中央服务器 有四种类型的调查。他们是这样组织的,有许多项目,每个项目只能有一个每种类型的调查(这里是STI?),调查属于一个项目。每个调查都会从本地应用程序收到一份报告,因此会有很多报告。记录这些报告的Rails 3应用程序应该以某种方式模拟这种逻辑。第一个问题是:这

我被要求做一些报告(记录)服务。该员工在许多公司的本地安装了web应用程序(只是一些用PHP编写的动态网站)。这个web应用程序是一种调查。所有数据都保存在本地数据库中,但现在的要求是,每次表单提交后,这些数据(调查结果)也将发送到中央服务器

有四种类型的调查。他们是这样组织的,有许多项目,每个项目只能有一个每种类型的调查(这里是STI?),调查属于一个项目。每个调查都会从本地应用程序收到一份报告,因此会有很多报告。记录这些报告的Rails 3应用程序应该以某种方式模拟这种逻辑。第一个问题是:这种AR结构对您有意义吗

  Project-1--------1-Survey-1-------*-Report

  Project
    has_one :survey
    has_many :reports, :through => :survey

  Survey
    belongs_to :project
    has_many :reports

  Report
    belongs_to :survey
第二个问题是关于一个AR模型有多个表。如果所有数据都存储在
报告中
表中,那么该表将很快变得庞大,一段时间后,高效查询属于特定调查的报告可能会成为一个问题。也许每个调查都有单独的表格会更好?如
报告
。这可能吗

此外,我不知何故被迫使用MySQL,但如果有另一个更好的解决方案,我可以尝试推动它


如果您仍然在这里,感谢您阅读本文:)

在每个外键(例如Reports.survey\u id)上放置一个索引,然后休息一下。你现在太担心演出了。在您看到MySQL的任何性能问题之前,您的Reports表中至少需要数百万条记录

第二个问题是关于一个AR模型有多个表。如果所有数据都存储在reports表中,那么该表将很快变得庞大,并且在一段时间后,高效地查询属于特定调查的报告可能会成为一个问题。也许每个调查都有单独的表格会更好?像报告一样。这可能吗

是的,这是可能的

您可以这样做:

class Report < AR::Base
  table_name_suffix = ''
end

Report.table_name_suffix = 'foo'
类报告
更新


#切分模型的简单示例
班级调查
谢谢,看起来很简单。我希望这不会引起任何问题。问题将是;)因为,您应该手动控制它。并在创建报表时创建新的报表表survey@Anton什么?这听起来像是一团糟。请参见@Anton,这需要处理原始SQL吗?@Ernest No,这不需要原始SQL。这需要在处理数据之前选择表。见更新。是的,也许我担心得太多了。见我最后对安东回答的评论。再次感谢你的提示。
# simple example of sharding model

class Survey < AR::Base
  has_many :reports

  def shard_reports
    Report.table_name_suffix = "_survey_#{self.id}"
    returning(reports){ Report.table_name_suffix = "" }
  end

end

Survey.first.reports_shard