【发布时间】:2017-11-06 10:30:50
【问题描述】:
我目前正在开发一款用于体育统计的应用,并且正在研究 Firebase 是否/如何处理我需要的数据和关系。
因为 Firebase 似乎不支持 WHERE a = x AND b = y 的等效项,所以我不确定哪种方法适合我的用例。
我的系统中有以下实体:
- 国家 - 世界上的一个国家。
- 运动 - 一项运动。
- 地区 - 一个国家的地区。对于每项运动,国家/地区的区域划分方式都不同。
将出现一个页面,您可以在其中选择国家和运动,并显示地区列表。
对于乡村和体育来说,这似乎很容易:
{
"countries": {
"-Kl9JB-XRzZyz_GkRiW8": {
"name": "The Netherlands"
}
},
"sports": {
"-Kl9JB-XRzZyz_GkA83b": {
"name": "football"
}
}
}
但是区域呢?由于一个地区与一个国家和一项运动相关联,这样的事情似乎是合乎逻辑的:
{
"regions": {
"-Kl9JB-XRzZyz_GkRiWa": {
"name": "West",
"country_key": "-Kl9JB-XRzZyz_GkRiW8",
"sport_key": "-Kl9JB-XRzZyz_GkA83b"
}
}
}
但是,这会导致问题,因为据我所知,我无法查询db.ref().child('regions'),然后按country_key = a 和sport_key = b 服务器端过滤。我可以获取一个国家/地区的所有地区,并按体育客户端过滤(反之亦然),但这不是一个非常优雅(或可扩展)的解决方案。
我想了几个解决方案:
- 为每个地区添加一个复合国家/运动键,例如
"country_key:sport_key": "-Kl9JB-XRzZyz_GkRiW8:-Kl9JB-XRzZyz_GkA83b" - 添加一个新实体
sports_countries,并让每个区域指向其中一个实体。
当然,这只是我整个模型的一部分。完整的模型有更多的关系,例如地区有比赛,国家有俱乐部,俱乐部有球队,球队在比赛,球员在球队等等。
您将如何在 Firebase 中解决此问题?或者,也看看数据模型的其余部分,你会告诉我我应该坚持使用关系数据库而不是 Firebase?
【问题讨论】:
标签: firebase firebase-realtime-database many-to-many nosql