我读了这个问题Firebase 中的多对多关系 https://stackoverflow.com/questions/41527058/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 的例子会很酷
thanks
询问 Firebase
使用 NoSQL,您必须首先考虑视图,然后让视图决定您的架构。您绝对可以通过一个查询来完成此操作,但忘记规范化,该概念仅适用于关系数据库。
假设您有一个视图,您希望按公司搜索并列出所有承包商及其信息,或者按承包商搜索并列出所有公司及其信息:
架构:
公司ContractorKey、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找到),所以更新和删除会涉及多条记录,但是查询会超级快,只要你在两个关键字段上建立索引。 Firebase 支持通过一个请求更新多条记录,因此这应该不会出现问题。
此外,您还希望避免在该模式节点中放入有关公司或承包商的所有信息,仅将您的视图所需的信息放入其中,并将不在“列表”视图中的所有详细信息放在单独的模式节点(一个专用的模式节点)中。一个是公司,一个是承包商。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)