【问题标题】:Firestore Hierarchical design - Courses , StudentsFirestore 分层设计 - 课程 , 学生
【发布时间】:2018-06-03 21:20:35
【问题描述】:
我的 json 树是这样设计的:
对于学生视图,我需要获取特定学生注册的所有课程及其学位,对于教师视图,我需要获取所有注册特定课程的学生及其学位。
对于学生视图:db.collection('students').doc('studentId')。
1- 这个设计看起来适合这个场景吗?
2-如何查询特定课程注册的所有学生?
【问题讨论】:
标签:
firebase
nosql
google-cloud-firestore
【解决方案1】:
这种设计还可以,但是您会遇到一些查询问题,因为结构有点“深”。 Denormalizing is normal 是一本好书。
我需要获取特定学生注册的所有课程
你的结构适合这个特定任务,你知道它是哪个学生并且你想获得他们的课程。你甚至不需要查询;只需观察students/studentId/courses的节点,你就会得到你需要的。
teacher view 我需要获取所有已注册的学生
具体课程
这个不适用于您的结构。好吧,这并不完全准确,因为您可以利用深度查询,但是这个怎么样
students
studentId_0
name: "Bill"
courses:
courseId_0: true
courseId_1: true
studentId_1
name: "Ted"
courses:
courseId_1: true
courses_available
courseId_0
studentId_0: true
courseId_1
studentId_0: true
studentId_1: true
使用此结构,您可以通过该学生课程节点获取学生注册的所有课程,或者对于教师视图,通过课程可用节点获取注册特定课程的所有学生。
在这种情况下,Bill 在课程 0 和课程 1 中,而 Ted 在课程 1 中
还有很多其他的方式来构建它,但是这种结构允许您在完全没有查询的情况下获取数据。查询比仅仅观察一个节点要“重”一些,所以如果观察是一个选项,那就更可取了。