Javascript Firebase-一对多关系&;询问
听说Firebase已经有一段时间了,上周我决定开始一个小项目 我阅读了许多关于数据库结构的文章,并为我的数据库提出了两种解决方案: 案例1 表B通过所有者ID引用了表AJavascript Firebase-一对多关系&;询问,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,听说Firebase已经有一段时间了,上周我决定开始一个小项目 我阅读了许多关于数据库结构的文章,并为我的数据库提出了两种解决方案: 案例1 表B通过所有者ID引用了表A { "A" : { "user-id-1" : { "name": "James", "number": "11111" }, "user-id-2" : { "name": "Rob",
{
"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之间存在一对多关系
假设我想检索与用户id-1相关的所有Bs:
提前感谢您的回答。您的结构似乎描述了一种“多对多”的关系,但有不同的方面。因为在“案例1”中,所有者id可以包含多个id:
"ownerId":
{
"user-id-1": true,
"user-id-1": true
}
在“情况2”中,两个“B”可以包含相同的Id:
"user-id-1" : {
"name": "James",
"Bs": {
"id-b-1": true
}
},
"user-id-2" : {
"name": "Rob",
"Bs": {
"id-b-1": true
}
}
在这两种情况下,一个“A”拥有多个“B”,一个“B”拥有多个“As”
为了使这个一对多,我建议使用“case1”并将对象更改为
"id-b-4" : {
"something": "value4",
"ownerId" : "user-id-1"
}
这将只允许项目的一个所有者。
在“情况2”中,没有任何东西可以强制每个“A”具有唯一的“b”。这也将使查询变得困难
综上所述,在我看来,这两种情况都是可行的,这取决于您如何使用这些对象,因为Firebase的卖点是实时数据,您应该选择与您的用例更相关的数据。如果您正在观察“As”,请选择案例2。如果您正在观察“Bs”,请选择“案例1”。或者你可以两者兼用,只要能让你的生活更轻松