为了账号安全,请及时绑定邮箱和手机立即绑定

Firebase中的多到多关系

Firebase中的多到多关系

人到中年有点甜 2019-06-28 14:51:00
Firebase中的多到多关系我有一个Firebase数据库。我有公司和承包商。一个承包商可以为一个以上的公司工作,一个公司可以有多个承包商。这是一个直截了当的多到多的关系。我希望能够回答有关公司和承包商的问题:给一个公司,谁是现在的承包商。给一个承包商他们为什么公司工作。在火力范围内构造数据的替代方案是什么?
查看完整描述

2 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

经过进一步的研究,我将尝试回答我自己的问题。我已经审查了许多其他帖子,解决这个问题的一个解决方案是在一个公司对象中存储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写意-查找承包商的所有公司或公司的所有承包商。现在只有一份清单需要维护。我认为这是我的需求的最佳解决方案。


查看完整回答
反对 回复 2019-06-28
  • 2 回答
  • 0 关注
  • 406 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信