我的数据目前按以下方式构建。
州(即加利福尼亚州)" has_many"学校, 学校" has_many"等级(即8年级或9年级), GRADE" has_many"课堂(即艺术,历史,化学), CLASSES" has_many"学生。
我的目标是从高级视图获取低级细节,否则,我想让所有学生(数据结构中的最低分母)在STATE(结构中的最高级别组件)内。什么是最简单,最有效的结构方式,所以我可以命令让所有学生进入一个州,即" State.find(姓名:"加州")。 #34 ;.
我尝试过两级"通过"协会但似乎有限。
答案 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
将加入School
和Enrollment
。
展平结构需要states_students
连接表,由于数据重复,该表非常不合适。复制意味着在创建/更新学生时更慢的插入和更新查询。这同样适用于科目和年级。
这并不能解决当前和以前学生之间的区别问题,可以通过将结束日期或表示状态的枚举添加到Enrollment
来解决。
Enougher问题是处理可能由所有等级或类共享的数据。例如,可以在州级而不是在学校级别设置的目标。另一个案例是一个可能延伸几个等级的主题。