Firebase Firestore - 关系数据设计方法

2024-03-11

我对 Firebase 完全陌生,我正在尝试了解“关系”数据(1-1 和 1-many)的最佳数据库模型设计。

我们正在使用火库数据库(不是实时数据库)。

说我们有Projects其中可以包含许多Users, and a User可以是多个Projects

UI 需要显示一个列表Users in a Project这显示了类似的事情email, firstname, lastname and department.

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

  • 一个数组User中的 IDProject文档?
  • Id 的映射Project文档?

我读过上述建议的方法,但那是为了实时数据库? 火库支持子集合,这听起来更合适......

  • 的一个子集合Users在项目文件中?
  • 单独的集合映射Project id to User id?
  • A Reference数据类型?我读过这里https://firebase.google.com/docs/firestore/manage-data/data-types https://firebase.google.com/docs/firestore/manage-data/data-types about Reference数据类型,这听起来像是我想要的,但我找不到更多关于它的信息!

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

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

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


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

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

确保数据完整性可以通过执行批量写入 https://firebase.google.com/docs/firestore/manage-data/transactions#batched-writes或使用交易 https://firebase.google.com/docs/firestore/manage-data/transactions#updating_data_with_transactions。这些要么完全成功,要么完全失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase Firestore - 关系数据设计方法 的相关文章

随机推荐

  • 组合两个 matplotlib 颜色图

    我想将两个颜色图合并为一个 这样我就可以使用一个cmap一个用于负值 另一个用于正值 目前 我使用屏蔽数组来完成此操作 并用一张图像绘制一张图像cmap以及另一个图像与另一个图像 结果是 有以下数据 dat np random rand 1
  • 使用 Clearcase 递归签入

    我想将一个目录和所有子目录签入到透明案例中 有具体的命令可以实现吗 目前我正在进入每个目录并手动检查每个文件 我会推荐这个问题 https stackoverflow com questions 33577 how do i perform
  • 如何在 JavaScript 中循环遍历 JSON 关联数组?

    我从服务器收到 JSON 响应 并且必须在 javascript 中循环遍历数组并获取值 但我似乎无法循环遍历它 数组的 JSON 响应如下所示 1 Schools 20 Profiles 31 Statistics 44 Messages
  • 在 Facelet 模板中包含非 Facelet 内容

    有没有办法将 html 文件的内容插入到 Facelet 模板中 Facelets 标签不起作用 因为它仅用于包含 Facelet 内容 换句话说 我正在寻找相当于 JSP include 指令的 Facelets 我可能不明白你需要什么
  • 如何等待一组异步回调函数?

    我的代码在 javascript 中看起来像这样 forloop async call returns an array to its callback 所有这些异步调用完成后 我想计算所有数组的最小值 我怎样才能等到他们所有人呢 我现在唯
  • TFS 电子邮件通知

    当我在 TFS 中添加错误 工作项 并将其分配给用户时 我希望向该用户发送一封电子邮件 此外 如果现有错误的 分配给 发生更改 我希望该用户收到一封电子邮件 当用户在 TFS 2008 中分配了更改的错误时 是否可以向用户发送警报 至少在
  • 指令在 Spray 中如何工作?

    我想了解 Spray 中的指令如何工作 根据文档 http spray io documentation 1 1 SNAPSHOT spray routing key concepts directives 指令的一般结构如下 name a
  • 通过WCF发送图像的有效方法?

    我正在通过从头开始编写 VNC 等自定义远程控制应用程序来学习 WCF LINQ 和其他一些技术 我创建它时考虑了三个主要目标 服务器将在应用程序级别 即无缝窗口 提供 远程控制 而不是完整的桌面访问 客户端可以选择服务器上运行的任意数量的
  • 内存分配和 **argv 参数[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我知道我们使用这个论证的目的 我什至知道如何使用这个论证 只有一件事我仍然不明白 程序如何为来自输入的字符串分配内存 argv 在程序开始时
  • Safari 11.0.3 无法识别内容安全策略哈希

    我有一个元标记 其中包含以下指令 然后 我在页面下方有 2 个内联脚本 每个脚本都应与策略中生成的 sha 之一匹配 在 Chrome 和 Firefox 中 我没有收到任何投诉 我的脚本按预期运行 在 Safari 版本 11 0 3 1
  • 在添加另一个标记之前检查现有标记

    谷歌地图 API v2当我等待另一个应用程序完成时 我出于兴趣创建了另一个应用程序 该应用程序一次只能将 1 个标记添加到地图中 我喜欢我做的地图 我目前有这段代码 如果标记已存在 它将清除地图 然后添加另一个标记 但我想要的是它显示一条消
  • `tools:replace="android:supportsRtl"` 可以与 `tools:ignore="AllowBackup"` 一起使用吗?

    正如张贴在https stackoverflow com a 39178185 3286489 https stackoverflow com a 39178185 3286489 解决如下错误 Error Execution failed
  • 当我单击外部提供商按钮时,为什么我的网站会重定向回登录屏幕?

    我正在将 ASP Net MVC4 站点升级到 MVC5 并在此过程中实现新的 OWIN 身份验证方法 我已从空白 MVC5 项目上的帐户控制器复制了操作方法 问题是 当我单击外部提供商按钮 例如 Google 时 我只是再次重定向回登录页
  • 文本文件中字符串中的两个单词

    我正在尝试在字符串中获取两个单词 但我不知道该怎么做 我尝试过 但如果在文本文件中我有 姓名 Penny Marie 它会给我 姓名 Penny 我怎样才能在s1中获得Penny Marie 谢谢 include
  • 如何比较两个字符串在每个索引处的字符?

    我有两个长度相同的字符串 我想按元素比较字符串并为每个索引返回 TRUE 或 FALSE 例如 string1 lt abcd1234 string2 lt abcd1434 result lt T T T T T F T T 到目前为止
  • org.postgresql.util.PGobject 无法转换为 org.postgis.PGgeometry

    当我尝试从 PostGIS 数据库加载点时 我得到以下信息 例外 Caused by java lang ClassCastException org postgresql util PGobject at org hibernatespa
  • Chrome 浏览器操作弹出窗口是否有硬编码的最大高度?

    我无法使 Chrome 扩展程序的 browseraction 弹出窗口高度超过 600 像素 我通过 document body style height 控制它 这是硬编码的最大值吗 我正在 OS X Lion 上使用 Chrome v
  • 如何将数组传递给需要 var args 的 objc 方法(例如...')

    我在库中有一个方法 如下所示 id initWithSomeObjects NSString something NS REQUIRES NIL TERMINATION 我真的很想用数组而不是 var args 来调用它 因为我想传入的对象
  • 如何在 Ubuntu 上写入 Realm 对象服务器

    我已经完成了 Realm 移动平台教程 link https realm io docs realm mobile platform example app cocoa 您创建一个 Swift 任务应用程序 我能够让应用程序和服务器在我的本
  • Firebase Firestore - 关系数据设计方法

    我对 Firebase 完全陌生 我正在尝试了解 关系 数据 1 1 和 1 many 的最佳数据库模型设计 我们正在使用火库数据库 不是实时数据库 说我们有Projects其中可以包含许多Users and a User可以是多个Proj