当前位置: 首页 > 知识库问答 >
问题:

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

益稳
2023-03-14

只是一个关于设计Firestore模式的简单问题:

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

Ex:

我想建立一个物业管理应用程序

公司拥有包含单元的房产。这里的层次结构很简单。

因此,随着时间的推移,租户将租用多个单元,随着时间的推移,每个单元将有许多租户...所有这些都包含在将一个单元与一个或多个租户联系在一起的租约中。

我想单位可以拥有租约,但租户如何看待他们的租约。。租约是否应包含引用承租人的子集合。。租户是高层吗?

只是想找一些基本的建议。。

还是只使用关系数据库的GraphQL用户更好?

共有1个答案

易修洁
2023-03-14

更新:从2019年5月开始,Cloud FiRecovery现在支持集合组查询。

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

原来的答案

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

单元可以拥有租赁权,但这目前阻止了跨单元查询,比如租户租赁了哪些单元。我们还不支持集合组查询,但这样做是可行的。

今天要解决这个问题,让租赁成为单元租户字段之间1对1映射的顶级集合,那么您的租赁历史将是db.collection('租赁')。其中('租户', '==', 'cdock')。您可以在租约中存储关于该单元的足够信息,以避免从租约加入到单元,并存储关于租户的足够信息以避免加入。

如果每次租赁的租户数量较少,您也可以向许多租户租赁一个单元,租户设置如下:

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

然后你可以用db查询你的历史记录。集合(“租赁”)。其中('tenants.cdock','=',true)

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

 类似资料:
  • 我很难模拟这种情况。我在设计一个基于位置的优惠券系统。用户可以定义区域和优惠,然后将每个优惠关联到多个区域。此外,每个区域可以有多个优惠。所以zone和offer有很多对很多的关系。用户实体拥有这两个实体。只有在同一用户拥有区域和优惠的情况下,才能将它们关联起来。图表会很有帮助。多谢了。

  • 问题内容: 我有两个表: 通常,我会创建一个映射表’ ‘来将这些表链接成多对多关系。 这是最好的方法吗?我应该将s的列表存储在xml列中,而不是存储在“事件”表中吗? 我使用带有Linq的.NET 3.5 / 4作为DAL(尽管我认为这可能与所提出的设计问题无关)。 有兴趣看看人们的意见是什么。 谢谢。戴夫 问题答案: 映射表绝对是执行此操作的最佳方法-实体框架会将映射表转换为两侧的实体集合,并且

  • 问题内容: 程序包A有一个桌面Y和一个MonitorZ。程序包B有一个桌面Y和 两个 MonitorZ。我想在由实体设计器创建的数据库中表示该关系。 和之间(具有台式机,显示器,笔记本电脑等)之间存在多对多关系。每个季度,我们都会更新包裹,客户下订单。他们选择一个包,下订单时,该包会将其数据(类型,品牌,型号等)转储到新创建的中。 问题出在实体设计器为关系创建联结表的方式上。联结表具有两列,分别对

  • 我正在努力理解如何处理与JOOQ的一对多和多对多关系的Pojo。 我存储玩家创建的位置(一对多关系)。一个位置可以容纳多个可能访问它的其他玩家(多对多)。数据库布局可归结为以下内容: 在我的java应用程序中,所有这些信息都存储在一个pojo中。请注意,玩家和受邀玩家列表可以从应用程序中更新,也需要在数据库中更新: 我可以使用JOOQ的pojo映射将这三个记录映射到单个pojo吗?我可以使用这个p

  • 问题内容: 我想建立这样的关系(一个区域在x个其他区域的附近) 不幸的是,这是行不通的,因为EF生成的FK不正确…我如何才能使像这样的结构起作用? 3个区域的示例:3 Zones: Zone 1, Zone 2, Zone 3 Zone 1 Neighours: Zone 2, Zone 3 Zone 2 Neighbours: Zone 1 Zone 3 Neighbours: Zone1 有什

  • 问题内容: 任何人都可以解释在设计带有示例的表时如何实现一对一,一对多和多对多关系吗? 问题答案: 一对一: 使用外键访问被引用的表: 您还必须在外键列()上设置唯一约束,以防止子表()中的多行与引用表()中的同一行相关。 一对多 :在关系的许多方面使用外键链接回“一个”侧: 多对多 :使用联结表(例如): 查询示例: