javascript - 当我们有多对多关系时,如何在 firebase 中获取数据

标签 javascript firebase firebase-realtime-database angularfire2 nosql

我读了这个问题 Many to Many relationship in Firebase ,
这里描述了如何在 firebase(nosql 数据库)中创建或构造多对多关系, 而且非常简单,

companyContractors
  companyKey1
    contractorKey1: true
    contractorKey3: true
  companyKey2
    contractorKey2: true
contractorCompanies
  contractorKey1
    companyKey1: true,
    companyKey2: true
  contractorKey2
    companyKey2: true
  contractorKey3
    companyKey1: true

但是当我想获得所有承包商的特定公司时,我可以只使用一个请求吗?因为在这种情况下,我只获得 id 列表,然后,使用 js 循环或 forEach,我执行多个请求。

通常在其他 API 上,我只使用

URL/contractor/:id/company or 
URL/company/:id/contractors 

如何在 Firebase 上实现?
有一个使用angular2,angularfire2的例子会很酷
谢谢

AskFirebase

最佳答案

使用 NoSQL,您必须首先考虑 View ,然后让 View 决定您的架构。你绝对可以用一个查询来做到这一点,但忘了规范化,这个概念只适用于关系数据库。

假设您有一个 View ,您想要按公司搜索并列出所有承包商及其信息,或者按承包商搜索并列出所有公司及其信息:

架构: companyContractorKey, contractorCompanykey, contractorName, contractorSkill, 公司行业等...

其中 companyContractorKey 是一个包含公司名称和承包商名称串联的字段,例如:'Acme/Ellis Electric'。然后,您可以进行从“Acme/A”到“Acme/z”的范围搜索,并获取 Acme 的所有承包商。

同样,contractorCompanyKey 是一个包含承包商名称和公司的串联的字段,例如“Ellis Electric/Acme”。然后,您可以进行从“Ellis Electric/A”到“Ellis Electric/z”的范围搜索,以获取与 Ellis Electric 相关的所有公司。

缺点是公司的信息存储在多个记录中(使用 companyContractorKey 很容易找到),承包商的信息也存储在多个记录中(使用 contractorCompanyKey 找到),因此更新和删除将涉及多条记录,但是查询起来会 super 快,只要索引在这两个关键字段上。 Firebase 支持通过一次请求更新多条记录,因此这应该不会出现问题。

此外,您还希望避免在该模式节点中放入有关公司或承包商的所有信息,只放入您的 View 所需的信息,并将所有不在“列表” View 中的详细信息放在单独的模式节点中,一个专用于公司,一个专用于承包商。

关于javascript - 当我们有多对多关系时,如何在 firebase 中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41862017/

相关文章:

ios - 从 Firebase 填充的 CLLocationCooperative2D 数组不保留其条目。 swift 4

java - 单击单选按钮后如何更新 Firebase 中的数据?

android - 如何使用 FirebaseListAdapter 获取键和值

android - 根本不在 Android 中缓存 Firebase 数据库的特定部分

javascript - 如何使用jquery/javascript通配符查找图像

javascript - 在JS中,如何仅在多个map函数完成时才运行一段代码?

ios - Firebase crashlytics 不报告崩溃

适用于欧盟应用的 Firebase 位置最佳实践

javascript - 学校元素 - 带有图钉和 onclick 事件的 IMG

javascript - Jquery .animate 无意行为