Разработка схемы для хранения, редактирования и настройки списка
Я не очень разбираюсь в дизайне БД и не создавал чего-то подобного раньше, где это занималось созданием и управлением списками, поэтому любой совет очень ценится. Производительность можно настроить позже, гораздо больше заботясь о сохраняемости и расширяемости.
Я использую 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: Храните идентификаторы модулей в виде массива внутри Syllabus
Syllabus
- array of module_ids
Это, очевидно, самое простое, но я не смогу хранить информацию, специфичную для программы / модуля. Кроме того, мне нужно сделать свои собственные проверки правильности
Другое соображение заключается в том, что я должен был бы позволить учителям, в свою очередь, настраивать учебную программу для студентов, что-то вроде этого...
Student
- has_one Syllabus
- has_many SyllabusPersonalizations
SyllabusPersonalizations
- has_one Student
- has_one Syallabus
- .... customization information...
Любая помощь будет высоко ценится!
1 ответ
Предисловие: предположения в ближайшее время:)
Описываемые вами отношения идеально подходят для структуры документа JSON. Забудь has_many
а также 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
коллекция, которая является родителем