Firestore:学术时间表结构

时间:2019-02-11 14:17:49

标签: database google-cloud-firestore

我正在尝试找出一种有效的结构,将学术时间表存储在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()获取类。这导致大量文档读取。

要更新当前星期,我需要更新每个时间表文档。

有什么更好的方法来解决这个问题?

感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:1)

最好在Firestore中的不同文档中重复重要数据。

假设戴安娜想通过电话阅读时间表,她的时间表有4门课程,3个模块,10个班级。将所有这些详细信息放在一个文档中,因此当她想在应用程序屏幕上查看时间表时,应用程序会读取一个文档以完成时间表。每个学生都有自己的继承人时间表文件