Firebase中的多到多关系

Firebase中的多到多关系

我有一个Firebase数据库。我有公司和承包商。一个承包商可以为一个以上的公司工作,一个公司可以有多个承包商。这是一个直截了当的多到多的关系。我希望能够回答有关公司和承包商的问题:

  1. 给一个公司,谁是现在的承包商。
  2. 给一个承包商他们为什么公司工作。

在火力范围内构造数据的替代方案是什么?


人到中年有点甜
浏览 407回答 2
2回答

HUH函数

经过进一步的研究,我将尝试回答我自己的问题。我已经审查了许多其他帖子,解决这个问题的一个解决方案是在一个公司对象中存储ContractorKeys列表,并在每个承包商对象中存储一个CompanyKeys列表。下面的例子说明了这一点。companies : {   companyKey1 : {     name : company1     ...     contractors : {       contractorKey1 : true,          contractorKey3 : true     }   }   companyKey2 : {     name : company2     ...     contractors : {       contractorKey2 : true,       }    } } contrators : {   contractorKey1 : {      name : bill      ...      companies : {         companyKey1 : true      }    }   contractorKey2 : {      name : steve      ...      companies : {         companyKey1 : true      }    }   contractorKey3 : {      name : jim      ...      companies : {         companyKey2 : true      }    } }这个组织的“工作”意义上说,上述问题是可以回答的。但是这种解决方案的一个缺点是,当承包商/公司的任务发生变化时,有两个列表需要维护。如果有一种方法在一个列表中表示这些信息,那就更好了。我想出了一个更好的解决办法。解决方案是创建第三份清单,此外还有公司和承包商,称为ComanyAndContractorAsmission。这份清单的内容将代表单一承包商和业主之间的关系。它的内容将是一对字段,ContractorKey和companyKey。然后,我们可以取消公司内部的承包商名单和承包商内部的公司名单。这种替代结构如下所示。注意,在公司对象中没有承包商列表,也没有带有承包商对象的公司列表。companies : {   companyKey1 : {     name : company1     ...   }   companyKey2 : {     name : company2     ...   } } contrators : {   contractorKey1 : {      name : bill      ...   }   contractorKey2 : {      name : steve      ...   }   contractorKey3 : {      name : jim      ...   } } companyAndContractorsAssignment : {   key1 : {     contractorKey1 : true,     companyKey1: true,   }   key2 : {     contractorKey3 : true,     companyKey1: true,   }   key3 : {     contractorKey2 : true,     companyKey2: true,   }这种替代结构允许一个人使用orderBychild/equalto来回答问题-对公司进行查询-AndContractorsAs写意-查找承包商的所有公司或公司的所有承包商。现在只有一份清单需要维护。我认为这是我的需求的最佳解决方案。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL