Разработка схемы для хранения, редактирования и настройки списка

Я не очень разбираюсь в дизайне БД и не создавал чего-то подобного раньше, где это занималось созданием и управлением списками, поэтому любой совет очень ценится. Производительность можно настроить позже, гораздо больше заботясь о сохраняемости и расширяемости.

Я использую 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 коллекция, которая является родителем

Другие вопросы по тегам