私はデータベース設計の経験があまりなく、リストの作成と管理を含むこのようなものを以前に構築したことがないため、アドバイスをいただければ幸いです。パフォーマンスは後で調整できますが、保守性と拡張性がより重要になります。
私は 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
これは明らかに最も単純ですが、プログラム/モジュール固有の情報を保存することはできません。また、独自の検証チェックを行う必要があります。
もう 1 つの考慮事項は、教師が生徒のシラバスもカスタマイズできるようにする必要があるということです。たとえば、次のようになります。
Student
- has_one Syllabus
- has_many SyllabusPersonalizations
SyllabusPersonalizations
- has_one Student
- has_one Syallabus
- .... customization information...