Firestore分层设计 - 课程,学生

时间:2017-12-21 08:28:39

标签: firebase nosql google-cloud-firestore

我设计了我的json树:

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

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

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

1-这个设计看起来好吗?

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

1 个答案:

答案 0 :(得分:0)

这个设计还可以,但是你会遇到一些查询问题,因为结构有点'深层'。 Denormalizing is normal是一本很好的读物。

  

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

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

  

老师的观点我需要让所有注册的学生都参加   具体课程

这个不适用于您的结构。好吧,这并不完全准确,因为你可以利用深度查询但是这个怎么样

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

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