【问题标题】:Problems with firebase logicfirebase 逻辑的问题
【发布时间】:2019-05-30 00:39:36
【问题描述】:

我有一个问题,我很确定这里的人可以帮助我。

我是编码初学者(仅 1 或 2 个月),我很难弄清楚逻辑是如何工作的。

这是我的问题:

我在 firebase 中有 3 个集合:

  1. 锦标赛

  2. 游览

  3. 备注

-> 我有多个锦标赛,每个人都包含 5 个不同的巡回赛,每个锦标赛都包含用户的笔记。

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

锦标赛 A -> 巡回赛:A、B、C、D、E -> 每个锦标赛的用户备注?

我只是需要关于如何将所有内容分组的帮助。

【问题讨论】:

  • 您使用的是 Firestore 还是实时数据库
  • 我正在使用 Firestore!
  • 我想我找到了最好的解决方案!
  • 当然.. 继续。如果您需要什么,请告诉我
  • 如果我创建 3 个具有相同文档 ID 的集合!你觉得这样行吗??

标签: java android firebase google-cloud-firestore


【解决方案1】:

没有单一正确的数据模型,因为(对于所有 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 实施集合组查询之前)。

第二种模型的一个缺点是您总是需要查询,并且就写入而言它的可扩展性较低。

【讨论】:

  • 非常感谢您抽出宝贵时间。我认为第二个选项对我来说是最好的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2018-06-08
相关资源
最近更新 更多