我的 Firebase 中有两项:providers
and services
,我正在尝试找出使用 Firebase 推荐的扁平化架构方法构建和建立关系的最佳方法。
我的数据看起来像这样:
{
"services" : {
"hip_replacement" : {
"title" : "Hip Replacement"
}
},
"providers" : {
"the_blue_hospital" : {
"title" : "The Blue Hospital"
}
}
}
我想将这两个项目链接在一起,这样,如果您要访问“髋关节置换”页面,“蓝色医院”将显示在其下方,如果您要访问“蓝色医院”页面,“髋关节置换”将显示在其下方。本质上是双向关系。
构建这样的东西的最佳方法是什么?我的想法如下:
{
"services": {
"hip_replacement": {
"title": "Hip Replacement",
"providers": {
"the_blue_hospital": true,
"the_red_hospital": true
}
},
...
},
"providers": {
"the_blue_hospital": {
"title": "The Blue Hospital",
},
"the_red_hospital": {...
},
"the_green_hospital": {...
}
}
}
有没有更好的方法来实现这个或更优雅的解决方案?任何帮助表示赞赏。
提前致谢!
Firebase 中联接数据的问题在于,您针对某些读取或更新用例进行了优化,而牺牲了其他用例。在上面的示例中,创建或删除服务和提供商之间的关系需要对每个“表”进行两次单独的更新。这确实没有什么问题,但这不是唯一的方法。
对于中等大小的数据集,您可以有一个将服务映射到提供者的“连接表”,类似于关系数据库世界中可能执行的操作。数据可能看起来像这样:
{
"services": {
"hip_replacement": {}
},
"providers": {
"the_blue_hospital": {...},
"the_red_hospital": {...},
"the_green_hospital": {...}
},
"serviceProviders": {
"-JqD5JX0RUDTXsu7Ok3R": {
"provider": "the_blue_hospital",
"service": "hip_replacement"
}
"-JqDoKfyJqPkQlCXDvFM": {
"provider": "the_green_hospital",
"service": "hip_replacement"
}
"-JbE7Ji_JRz2bHgBdMWQ": {
"provider": "the_blue_hospital",
"service": "hip_replacement"
}
}
这种方法有优点和缺点:
Pro
- 轻松在一处添加映射
- 轻松在一处删除映射
- 灵活的选项可以重新格式化数据以进行显示,超越单个提供商或服务的上下文(例如索引)。
Con
- 您已加载整个数据集。 Firebase 不允许您在键内进行过滤,客户端必须加载整个列表,然后在内存中进行过滤。我怀疑这对于数百条记录来说效果很好,无论如何,也许对于几千条记录也可以。
- 您必须执行一些客户端工作来过滤要显示的列表并将其与实际的服务和提供商数据合并。同样,如果数据集不太大,underscore/lodash groupBy() 可以轻松完成此任务。
您应该考虑:
- 你会做多少更新和删除?
- 加入信息真的那么简单吗?您是否需要更多记录(显示名称、价格等),从而使连接表的维护比我建议的更加复杂?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)