自从听说Firebase以来已经有一段时间了,我上周决定开始一个小项目。
我已经阅读了很多关于数据库结构的文章,我为我的数据库提出了两个解决方案:
案例1
表 B 通过 ownerId 引用表 A
中的记录{
"A" : {
"user-id-1" : {
"name": "James",
"number": "11111"
},
"user-id-2" : {
"name": "Rob",
"number": "11111"
},
...
},
"B" : {
"id-b-1" : {
"something": "value1",
"ownerId" : {
"user-id-1": true
}
},
"id-b-2" : {
"something": "value2",
"ownerId" : {
"user-id-2": true
}
},
"id-b-3" : {
"something": "value3",
"ownerId" : {
"user-id-2": true
}
},
"id-b-4" : {
"something": "value4",
"ownerId" : {
"user-id-1": true
}
},
...
}
}
案例2
表 A 通过 Bs 数组引用表 B
中的记录{
"A" : {
"user-id-1" : {
"name": "James",
"number": "11111"
"Bs": {
"id-b-1": true,
"id-b-4": true,
"id-b-7": true,
}
},
"user-id-2" : {
"name": "Rob",
"number": "11111"
"Bs": {
"id-b-2": true,
"id-b-3": true,
"id-b-6": true,
}
},
...
},
"B" : {
"id-b-1" : {
"something": "value1",
},
"id-b-2" : {
"something": "value2",
},
"id-b-3" : {
"something": "value3",
},
"id-b-4" : {
"something": "value4",
},
...
}
}
在表格 A 中,记录的ID与登录用户 user-id-1 的ID相同,因为我无法添加firebase提供的用户对象的更多属性。
我想说A和B之间相关的记录可以增长到数千条记录。
因此 A 与 B 之间存在一对多的关系。
我想说要检索与 user-id-1 相关的所有 Bs :
提前感谢您的回答。
答案 0 :(得分:0)
你的结构似乎在描述一个"多对多"关系,但在不同的方面。因为"案例1" ownerId可以包含多个id:
"ownerId":
{
"user-id-1": true,
"user-id-1": true
}
和"案例2"两个" Bs"可以包含相同的Id:
"user-id-1" : {
"name": "James",
"Bs": {
"id-b-1": true
}
},
"user-id-2" : {
"name": "Rob",
"Bs": {
"id-b-1": true
}
}
在这两种情况下,你都有一个" A"拥有多个" Bs"和一个" B"由多个" As"。
拥有为了使这一对多,我建议使用"案例1"并将对象更改为
"id-b-4" : {
"something": "value4",
"ownerId" : "user-id-1"
}
这将只允许该项目的一个所有者。 在"案例2"没有什么可以强制执行独特的" Bs"对于每个" A"。它也会使查询变得困难。
所有这一切,我认为这两种情况都是可行的,这取决于你如何使用这些对象,因为Firebase的卖点是你应该选择与你的用例更相关的实时数据。如果您正在观察" As"选择了案例2.如果你正在观察" Bs"选择"案例1"。或者你可以使用两者,无论是什么让你的生活更轻松。