Firebase逻辑问题

时间:2019-01-03 12:09:53

标签: java android firebase google-cloud-firestore

我遇到了问题,我很确定这里的人可以帮助我。

我是编码的初学者(仅1或2个月),并且很难弄清逻辑的工作原理。

这是我的问题:

我在firebase中有3个收藏集:

  1. 比赛

  2. 游览

  3. 注释

->我有多个锦标赛,每个锦标赛包含5个不同的游览,每个锦标赛包含用户记录的笔记。

所以我的问题是,我该如何关联这3个集合并仅显示示例:

锦标赛A->巡回赛:A,B,C,D,E->每次锦标赛的用户注释吗?

我只需要帮助我思考如何将所有内容分组。

1 个答案:

答案 0 :(得分:0)

没有一个正确的数据模型,因为(对于所有NoSQL解决方案)最佳的数据模型取决于应用程序的用例。

但是据我所知,您有两个主要选择:

  1. 嵌套子集合
  2. 通过嵌入父ID连接文档

嵌套子集合

Firestore是一个包含文档集合的数据库。每个文档都可以在其下包含子集合。鉴于您的数据模型是分层的,这意味着您可以像这样嵌套它们:

Tournaments (collection)
  Tournament1 (document)
    Tours (collection)
      Tour1_1 (document)
        Notes (collection)
          Notes1_1_1 (document)

现在,每个锦标赛都有自己的巡回赛,并且每个巡回赛都有自己的音符。您可以单独访问它们:因此,只需阅读一次游览的便笺,而无需为此建立查询。

通过嵌入父级ID连接文档

另一种方法是拥有三个顶级集合,并通过将父ID嵌入到每个子文档中来将每个子文档连接到其父文档,如下所示:

Tournaments (collection)
  Tournament1 (document)
Tours (collection)
  Tour1_1 (document)
    TournamentID: Tournament1
Notes (collection)
  Notes1_1_1 (document)
    TourID: Tour1_1

使用此模型,您可以通过查询ref.collection("Tours").where("TournamentID", "==", "Tournament1")来获得所有锦标赛的巡回赛。

第二个模型的优点是您可以访问所有锦标赛的巡回演出,而在第一个模型中,您一次只能访问一个锦标赛的巡回演出(至少在Firestore实施收藏组查询之前)。

第二个模型的一个缺点是,您将始终需要查询,并且就写入而言,它的可伸缩性较差。