【问题标题】:Firestore Hierarchical design - Courses , StudentsFirestore 分层设计 - 课程 , 学生
【发布时间】:2018-06-03 21:20:35
【问题描述】:

我的 json 树是这样设计的:

  • 学生(收藏)
    • studentId(文档)
      • 姓名
      • 课程(收藏)
        • courseId(文档)
        • 课程名称
        • 考试学位

对于学生视图,我需要获取特定学生注册的所有课程及其学位,对于教师视图,我需要获取所有注册特定课程的学生及其学位。

对于学生视图: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 中

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

    【讨论】:

      猜你喜欢
      • 2018-08-26
      • 2022-01-23
      • 2019-11-30
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      相关资源
      最近更新 更多