rails多层次"到",数据库架构分层

时间:2015-06-23 17:06:03

标签: ruby-on-rails nested associations

我的数据目前按以下方式构建。

州(即加利福尼亚州)" has_many"学校,  学校" has_many"等级(即8年级或9年级),  GRADE" has_many"课堂(即艺术,历史,化学),  CLASSES" has_many"学生。

我的目标是从高级视图获取低级细节,否则,我想让所有学生(数据结构中的最低分母)在STATE(结构中的最高级别组件)内。什么是最简单,最有效的结构方式,所以我可以命令让所有学生进入一个州,即" State.find(姓名:"加州")。 #34 ;.

我尝试过两级"通过"协会但似乎有限。

1 个答案:

答案 0 :(得分:0)

潜在的基本数据设计如下:

class State < ActiveRecord::Base
  has_many :schools
  has_many :students, through: :schools
end

# Links students to schools
class Enrollment < ActiveRecord::Base
  belongs_to :school
  belongs_to :student
  belongs_to :grade
end

class School < ActiveRecord::Base
  has_many :enrollments
  has_many :students, through: :enrollments
  has_many :grades
  has_many :subjects, through: :grades
  belongs_to :state
end

# Denotes a educational step as in 1st grade
class Grade
  belongs_to :school
  has_many :subjects
end

# We can't use Class since it clashes with the Class object. 
class Subject
  belongs_to :grade  
end

class Student < ActiveRecord::Base
  has_many :enrollments
  has_many :schools, through: :enrollments
end

State.find(1).students将加入SchoolEnrollment

展平结构需要states_students连接表,由于数据重复,该表非常不合适。复制意味着在创建/更新学生时更慢的插入和更新查询。这同样适用于科目和年级。

这并不能解决当前和以前学生之间的区别问题,可以通过将结束日期或表示状态的枚举添加到Enrollment来解决。

Enougher问题是处理可能由所有等级或类共享的数据。例如,可以在州级而不是在学校级别设置的目标。另一个案例是一个可能延伸几个等级的主题。