【发布时间】:2013-09-03 19:21:35
【问题描述】:
我在数据库设计方面不是很有经验,以前也没有构建过这样的东西,其中涉及创建和管理列表,因此非常感谢任何建议。性能可以稍后调整,更关注可维护性和可扩展性。
我正在使用 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...
【问题讨论】:
-
您在 MongoDB 中这样做的原因是什么?您的数据似乎非常相关,可能在 SQL 数据库中工作得更好
-
@Mason 我知道吗? ;) 我不久前开始使用 mongodb,但从未真正回头。添加简单对象和字段的灵活性、易于更改、不需要数据库迁移确实产生了巨大的变化。此外,当我的要求得到修复时,迁移到 sql 的选项实际上并不算太糟糕——我以前做过一次。
标签: ruby-on-rails mongodb mongoid schemaless