firebase - 设计具有多对多和跨实体关系的 Cloud Firestore 架构

标签 firebase google-cloud-firestore

关于设计 Firestore 架构的简单问题:

我知道您必须使用正确的工具来完成这项工作,而且 Firestore 不应该是关系数据库,但是是否有建议的技术来建模多对多关系?

前任:

我想建立一个属性(property)管理应用程序

公司拥有包含单位的属性(property)。层次结构在这里很简单。

因此,随着时间的推移,租户将租用多个单元,并且随着时间的推移,每个单元将有许 Multi-Tenancy 。所有这些都由租约封装,将 1 个单元与 1 个或多个租户联系在一起。

我猜单元可以拥有租约,但随着时间的推移,租户如何查看他们的所有租约。租约是否应该有一个引用租户的子集合。租户是顶级的吗?

只是寻找一些基本的建议..

还是仅将 GraphQL 与关系数据库一起使用会更好?

最佳答案

更新:截至 2019 年 5 月,Cloud Firestore 现在支持 collection group queries .

单元可以包含 Leases 子集合,您可以使用集合组查询返回包含特定用户的所有单元的所有租约。

原答案

不幸的是,这里没有免费的午餐。

单元可以拥有租约,但目前阻止了跨单元查询,例如租户租用了哪些单元。我们还不支持collection group queries但是当我们这样做时,这将是可行的。

今天要解决这个问题,请将租约设为 unit 之间的一对一映射的顶级集合。和 tenant字段,那么您的租赁历史记录将是 db.collection('leases').where('tenant', '==', 'cdock') .您可以在租约中存储有关单元的足够信息,以避免从租约加入单元,以及有关租户的足够信息以避免加入。

如果每个租约的租户数量很少,您还可以将 1 个单元租给许 Multi-Tenancy ,租户设置如下:

'tenants': {
  'cdock': true,
  'alice': true,
  'bob': true
}

然后您可以使用 db.collection('leases').where('tenants.cdock', '==', true) 查询您的历史记录.

租户可以是顶级(并加入)或不是,这取决于您需要保留多少有关他们的信息以及租约是否需要有关租户的最新信息。

关于firebase - 设计具有多对多和跨实体关系的 Cloud Firestore 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46572822/

相关文章:

javascript - Reactjs : Return function result to webpage

firebase批量更新和onWrite触发同步

java - 如何从 Cloud Firestore 获取一组数据?

android - 在 android 中禁用 google ML Kit 库的 firebase 日志记录

database - 如何使 Firebase 与另一个数据库保持同步

Firebase 云功能因配额错误而反复失败

javascript - Firestore 中的查询删除正在删除所有内容,如何解决?

swift - Firestore 数据库 - 文档未在集合中返回

ios - [Firebase/Core][I-COR000022] Firebase Analytics 不可用

ios - Cocoapods 安装失败。 Cocoapods 要求您的终端使用 UTF-8 编码