设计用于存储,编辑和自定义列表的模式

时间:2013-08-31 01:07:37

标签: ruby-on-rails mongodb mongoid schemaless

我在数据库设计方面不是很有经验,之前没有构建类似的东西,它涉及创建和管理列表,所以任何建议都非常感谢。性能可以在以后调整,更关注可维护性和可扩展性。

我正在使用mongodb,我允许教师创建由个人可重复使用的模块组成的个人教育大纲。教师可以为不同的学生定制课程大纲。

选项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

要编辑它,我几乎需要在每次修改程序时重置所有序列。

选项2:使用指向

之前和之后的指针存储记录
s = Syllabus.new
s1 = SyllabusModuleRecord.create(:syllabus => s, :module => module1, :before =>nil )        
s2 = SyllabusModuleRecord.create(:syllabus => s, :module => module2 , :before => s1 )

选项3:将模块ID存储为教学大纲

中的数组
Syllabus
- array of module_ids

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

另一个考虑因素是我需要允许教师为学生定制教学大纲,这样的话......

Student
- has_one Syllabus
- has_many SyllabusPersonalizations

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

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

前言:即将出现的假设:)

您描述的关系非常适合JSON文档结构。忘记此方案的has_manybelongs_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集合,即父