我在数据库设计方面不是很有经验,之前没有构建类似的东西,它涉及创建和管理列表,所以任何建议都非常感谢。性能可以在以后调整,更关注可维护性和可扩展性。
我正在使用mongodb,我允许教师创建由个人可重复使用的模块组成的个人教育大纲。教师可以为不同的学生定制课程大纲。
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
要编辑它,我几乎需要在每次修改程序时重置所有序列。
s = Syllabus.new
s1 = SyllabusModuleRecord.create(:syllabus => s, :module => module1, :before =>nil )
s2 = SyllabusModuleRecord.create(:syllabus => s, :module => module2 , :before => s1 )
Syllabus
- array of module_ids
这显然是最简单的,但我无法存储程序/模块特定信息。另外,我需要进行自己的验证检查
另一个考虑因素是我需要允许教师为学生定制教学大纲,这样的话......
Student
- has_one Syllabus
- has_many SyllabusPersonalizations
SyllabusPersonalizations
- has_one Student
- has_one Syallabus
- .... customization information...
非常感谢任何帮助!
答案 0 :(得分:1)
前言:即将出现的假设:)
您描述的关系非常适合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
集合,即父