Firestore分层设计 - 课程,学生

问题描述 投票:0回答:1

我设计了我的json树,如下所示:

  • 学生(收藏) studentId(文件) 名称 课程(收藏) courseId(文件) 课程名 examDegree

对于学生观点,我需要获得特定学生注册学位的所有课程,对于教师观点,我需要让所有注册了特定课程的学生获得学位。

对于学生视图:db.collection('students')。doc('studentId')。

1-这种情况的设计似乎没问题吗?

2-如何查询在特定课程中注册的所有学生?

firebase nosql google-cloud-firestore
1个回答
0
投票

这个设计没问题,但是你会遇到一些查询问题,因为结构有点“深入”。 Denormalizing is normal读起来不错。

我需要获得特定学生注册的所有课程

您的结构适用于此特定任务,您可以知道哪个学生,并且您希望获得他们的课程。你甚至不需要查询;只需观察学生/ studentId /课程中的节点,您就可以得到所需的信息。

老师的观点我需要让所有注册参加特定课程的学生参加

这个不适用于您的结构。嗯,这不是完全准确的,因为你可以利用深度查询但是如何做到这一点

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

通过这种结构,您可以通过该学生课程节点获得学生注册的所有课程,或者通过教师视图,通过courses_available节点获取所有注册特定课程的学生。

在这种情况下,Bill在课程0和1中,Ted在课程1中

还有许多其他方法可以构建它,但是这种结构允许您在没有查询的情况下获取数据。查询比观察节点有点“重”,所以如果观察是一个选项,那更好。

© www.soinside.com 2019 - 2024. All rights reserved.