0

我在数据库设计方面不是很有经验,并且以前没有构建过这样的东西,其中涉及创建和管理列表,因此非常感谢任何建议。性能可以稍后调整,更关心可维护性和可扩展性。

我正在使用 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:将模块ID存储为教学大纲中的数组

Syllabus
- array of module_ids

这显然是最简单的,但我无法存储程序/模块的特定信息。另外,我需要自己进行验证检查。

另一个考虑是我需要允许教师反过来为学生定制教学大纲,如下所示:

Student
- has_one Syllabus
- has_many SyllabusPersonalizations

SyllabusPersonalizations
- has_one Student
- has_one Syallabus
- .... customization information...
4

1 回答 1

1

前言:即将到来的假设:)

您描述的关系非常适合 JSON 文档结构。忘记这个场景的has_manyand 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作为父级的集合

于 2013-08-31T03:58:27.270 回答