Я пытаюсь найти эффективную структуру для хранения академических расписаний в Firestore.
Проблемы, которые мне нужно решить:
- Каждый курс имеет свое время начала и окончания
- Каждый курс имеет свою продолжительность в неделях
- Существует несколько различных расписаний для курса
- Необходимо иметь возможность анализировать посещаемость в классе
Вот структура, которую я сейчас имею:
courses
- course_id: string
- duration: number (weeks, eg: 24)
- end_time: number (timestamp of the last course day)
- start_time: number (timestamp of the first course day)
- name: string
modules
- module_id: string
- lectures: array
- lecture_id
- name: string
- code: string
- no_students: number
classes
- class_id: string;
- start_time: string (eg: 10:00)
- end_time: string (eg: 11:00)
- weekday: string (eg: Monday)
- module: map (a copy of module object to reduce reads)
- start_week: number
- end_week: number
timetables
- timetable_id: string
- classes: array
- class_id
- duration: number (duration in weeks, eg: 11)
- semester: number
- week: string (current week, eg: 4)
users
...
- timetable_id: string
Отдельная коллекция классов позволит упростить очереди для сравнения с коллекцией посещаемости.
Чтобы прочитать расписание, я получаю документ пользователя, затем получите документацию по расписанию, а затем получите классы, используя firestore.getAll()
.Это приводит к большому количеству прочтений документов.
Чтобы обновить текущую неделю, мне нужно будет обновлять каждый документ по расписанию.
Как лучше было бы подойти к этому?
Спасибо за ваше время и помощь.