【问题标题】:Firebase Firestore - relational data design approachesFirebase Firestore - 关系数据设计方法
【发布时间】:2018-05-11 23:03:16
【问题描述】:

我是 Firebase 的新手,我正在努力了解“关系”数据的最佳数据库模型设计,包括 1-1 和 1-many。

我们使用的是 Firestore 数据库(不是实时数据库)。

假设我们有Projects 可以包含许多Users,而User 可以包含多个Projects

UI 需要在Project 中显示Users 的列表,其中显示了emailfirstnamelastnamedepartment 等内容。

存储关系的最佳方式是什么?

  • Project 文档中的User id 数组?
  • Project 文档中的 ID 映射?

我已经阅读了推荐的上述方法,但是对于实时数据库Firestore 支持 Sub Collections,听起来更合适...

如果它只是一个地图或 ID 数组,那么您将如何检索有关用户的剩余数据?这是否必须位于应用程序 UI 中?

如果它是用户文档的子集合,有什么方法可以保持数据完整性?如果用户更改了他们的姓名,那么 UI / cloudFunction 是否必须更新 Sub 集合中该用户姓名的每个条目?

任何帮助/指针表示赞赏...

【问题讨论】:

  • 欢迎使用 NoSQL 数据库,您所知道的一切都被颠倒过来,有利于可扩展性。 :-) 我在下面回答了您的一些问题。

标签: firebase firebase-realtime-database google-cloud-firestore


【解决方案1】:

在 Firestore 中对多对多关系进行建模的方法与在 Firebase 的实时数据库中的方法几乎相同,我已在此回答:Many to Many relationship in Firebase。唯一的区别确实是您可以将查找列表存储在每个项目/用户的子集合中。

查找链接的项目也和以前一样,确实需要从客户端单独加载它们。这样的客户端连接并不像您最初预期的那么慢,因此请在假设它可能不够快之前对其进行测试。

可以通过执行batched writes 或使用transactions 来确保数据完整性。这些要么完全成功,要么完全失败。

【讨论】:

  • 太棒了,刚刚看了你的一些视频,现在感觉好多了。
  • 那么,在 firestore 中,我可以有一个包含用户列表的子集合,而不是根目录下的单独查找表?
  • 与纯字符串 uid 相比,使用 Firestore 数据类型 Reference 有什么好处?
猜你喜欢
  • 1970-01-01
  • 2018-10-26
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 2016-05-12
  • 2021-11-11
  • 1970-01-01
相关资源
最近更新 更多