我有一个Firebase数据库。我有公司和承包商。一个承包商可以为多个公司工作,而一个公司可以有多个承包商。这是直接的多对多关系。我希望能够回答有关公司和承包商的问题:
在Firebase中构造数据的替代方法有哪些?
最佳答案
自我回答确实是对此进行建模的一种方法。它可能是在关系数据库中建模的最直接等效方法:
一种替代方法是使用4个顶级节点:
最后两个节点如下所示:
companyContractors
companyKey1
contractorKey1: true
contractorKey3: true
companyKey2
contractorKey2: true
contractorCompanies
contractorKey1
companyKey1: true
contractorKey2
companyKey2: true
contractorKey3
companyKey1: true
这种双向结构使您既可以查找“公司承包商”又可以“公司承包商”,而无需查询。这势必会更快,尤其是在您添加承包商和公司时。
这对于您的应用程序是否必要,取决于您需要的用例,您期望的数据大小等等。
建议阅读NoSQL data modeling并查看Firebase for SQL developers。这个问题也出现在episode of the #AskFirebase youtube series中。
更新(2017016)
有人张贴了follow-up question that links here关于从“承包商”和“公司”节点中检索实际项目的信息。您将需要一次检索一个,因为Firebase没有与
SELECT * FROM table WHERE id IN (1,2,3)
等效的对象。但是此操作并不像您想象的那样慢,因为请求是通过单个连接进行流水线处理的。在这里阅读更多有关此信息:Speed up fetching posts for my social network app by using query instead of observing a single event repeatedly。