我有一个 Firebase 数据库。我有公司和承包商。一名承包商可以为多家公司工作,一家公司可以拥有多名承包商。这是一种简单的多对多关系。我希望能够回答有关公司和承包商的问题:
- 给定一家公司,他们是当前承包商。
- 给定承包商他们为哪些公司工作。
在 Firebase 中构建数据的替代方案有哪些?
最佳答案
self 回答确实是建模的一种方式。这可能是最直接相当于在关系数据库中建模的方式:
- 承包商
- 公司
- companyAndContractorsAssignment(多对多连接器表)
另一种选择是使用 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 .
关于firebase - Firebase 中的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41527058/