我在db设计方面不是很有经验,以前也没有构建过类似的东西,因为它涉及创建和管理列表,所以任何建议都是非常感谢的。性能可以稍后调优,更关心的是可维护性和扩展性。
我正在使用Mongodb,我允许教师创建由单个可重用模块组成的个人教育大纲。教师反过来可以为不同的学生定制教学大纲。
###Option 1:在“联合”表中存储数字序列:
Syllabus
- has_many SyllabusModuleRecords
SyllabusModuleRecord
- belongs to Syllabus
- belongs to Module
- int Sequence
Module
- has_many SyllabusModuleRecords
s = Syllabus.new
SyllabusModuleRecord.create(:syllabus => s, :module => module1, :sequence =>1 )
SyllabusModuleRecord.create(:syllabus => s, :module => module2 , :sequence =>2 )
.. and so on为了编辑它,每次对程序进行修改时,我都需要重新设置所有的序列。
###Option 2:使用指向前和后的指针存储记录
s = Syllabus.new
s1 = SyllabusModuleRecord.create(:syllabus => s, :module => module1, :before =>nil )
s2 = SyllabusModuleRecord.create(:syllabus => s, :module => module2 , :before => s1 )###Option 3:将模块ids作为数组存储在教学大纲中
Syllabus
- array of module_ids这显然是最简单的,但我无法存储程序/模块特定的信息。另外,我需要做我自己的验证检查。
另一个考虑是,我需要让教师也为学生定制教学大纲,如下所示:
Student
- has_one Syllabus
- has_many SyllabusPersonalizations
SyllabusPersonalizations
- has_one Student
- has_one Syallabus
- .... customization information...发布于 2013-08-31 03:58:27
前言:即将提出的假设:)
您所描述的关系非常适合JSON文档结构。忘记这个场景的has_many和belongs_to。使用JSON在数组中嵌套对象的能力。我建议您不要在短期内使用ODM,而要了解MongoDB的表达文档。
根据需要将modules添加到提纲上的嵌套数组中。然后,只允许老师修改教学大纲的内容。你的教学大纲应该有如下内容:
{
course_id: ObjectId(),
modules: [
{
module_template_id: ObjectId(),
name: "bla bla bla",
description: "bla bla bla",
due_date: "2013-09-28",
modified_from_template: false
},
{
module_template_id: ObjectId(),
name: "bla bla",
description: "bla bla customized",
due_date: "2013-10-05",
modified_from_template: true
}
]
}您将有另一个module_templates集合,它是父集合。
https://stackoverflow.com/questions/18543468
复制相似问题