首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计用于存储、编辑和自定义列表的架构

设计用于存储、编辑和自定义列表的架构
EN

Stack Overflow用户
提问于 2013-08-31 01:07:37
回答 1查看 73关注 0票数 0

我在db设计方面不是很有经验,以前也没有构建过类似的东西,因为它涉及创建和管理列表,所以任何建议都是非常感谢的。性能可以稍后调优,更关心的是可维护性和扩展性。

我正在使用Mongodb,我允许教师创建由单个可重用模块组成的个人教育大纲。教师反过来可以为不同的学生定制教学大纲。

###Option 1:在“联合”表中存储数字序列:

代码语言:javascript
复制
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:使用指向前和后的指针存储记录

代码语言:javascript
复制
s = Syllabus.new
s1 = SyllabusModuleRecord.create(:syllabus => s, :module => module1, :before =>nil )        
s2 = SyllabusModuleRecord.create(:syllabus => s, :module => module2 , :before => s1 )

###Option 3:将模块ids作为数组存储在教学大纲中

代码语言:javascript
复制
Syllabus
- array of module_ids

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

另一个考虑是,我需要让教师也为学生定制教学大纲,如下所示:

代码语言:javascript
复制
Student
- has_one Syllabus
- has_many SyllabusPersonalizations

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-31 03:58:27

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

您所描述的关系非常适合JSON文档结构。忘记这个场景的has_manybelongs_to。使用JSON在数组中嵌套对象的能力。我建议您不要在短期内使用ODM,而要了解MongoDB的表达文档。

根据需要将modules添加到提纲上的嵌套数组中。然后,只允许老师修改教学大纲的内容。你的教学大纲应该有如下内容:

代码语言:javascript
复制
{
  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集合,它是父集合。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18543468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档