我用这种方式构造了一些Firebase数据。这真的很简单,但是我不知道是否有一种更简单的方法来构造它,以有效地添加和删除团队成员。
在这种情况下,有个用户属于团队,并且有用户的团队。很基本的东西。
users:{
user1:{
name: "username",
profilePicUrl: "https://...",
teams:{
team1:true
}
},
user2:{
...
}
}
teams:{
team1:{
name:"SuperTeam",
members:{
user1: true,
user2: true,
....
}
}
}
我将进行两个查询。一个要求一个团队的所有成员,另一个要求一个成员的所有团队。
在界面中,我具有多个选择,用户可以在其中选择团队成员。此人将选择/取消选择多个用户,然后按保存按钮。
当用户按Save时,将发生以下情况。
我删除了teams表的所有成员并设置了新成员 根据所选选项。
我将团队添加到具有 “ user /:userId / teams /:teamId” set => true
但是从用户表中删除团队又如何呢?我想不出一种有效的方法。我提出的解决方案如下。
在users表中删除“ teams”数组并获取团队 查询“ teams /:teamId / members / userX”等于每个用户的 真正。这样,我只需要更新teams表。它有效,但是 它必须下载所有Teams数据,对于大型数据库来说, 不太有效。
当保存按钮为时,查找所选选项中的更改 按下并仅更新已更改的用户(我最喜欢的是 远)。
还有另一种结构化数据库的方法吗?还有其他选择可以方便地从成员中删除团队吗?
答案 0 :(得分:0)
从我的头顶来看,乍一看,您的数据库结构已经足够好了。我可以建议进行更改的事实是,您存储的是用户所在的团队,位于users
节点中,如果存在多个团队,这可能会使查询变得有些困难
您将不得不对许多错误项进行伪造,而根据您的要求对其中一些错误项进行伪造。
您宁愿只将有关团队的信息放在teams
节点中,而将与用户有关的其他相关信息放在users
节点中。
此外,如果团队本身有一个名称,然后在结构中将其命名为team1
然后给出适当的名称,对于您在问题中所说的似乎是多余的。
因此您的数据库结构应如下所示:
users:{
user1:{
name: "username",
profilePicUrl: "https://...",
otherInfo : ...
},
user2:{
...
}
}
teams:{
SuperTeam{
otherInfo: ...
members:{
user1: true,
user2: true,
....
}
},
MegaTeam {
otherInfo: ...
members:{
user1: true,
user2: true,
....
}
}
}
现在,要删除团队MegaTeam
,您只需从teams
节点中删除一个节点,有关成员的信息也将被删除,因此您不必再次查询以从users
节点中删除团队和其他信息。
编辑:
由于使用的是Firebase(noSQL),所以最好的办法是可以更改数据库并对其进行调整以适合您的需求。因此,我想说,更好的方法是为使团队与用户建立单独的结构。