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