我对NoSQL和Firebase实时数据库有点熟悉,而且我知道它不是解决关系数据库应该更合适的任务的最佳解决方案。我想验证一下我所拥有的简单多对多关系的结构。
我有活动和用户。我想使用Firebase存储有关参与活动的用户的信息,稍后我需要
我希望第一棵事件ID被城市划分。
events {
'city1' : {
event_id_1 : {'user_1', 'user_2'},
event_id_2 : {'user_3', 'user_4'}.
}
'city2' : {
event_id_3 : {'user_5', 'user_6'},
event_id_4 : {'user_7', 'user_7'}.
}
}
用户的第二棵树
users {
'user1' : {
'city1' : {event_id_1, event_id_2},
'city2' : {event_id_3, event_id_4},
'city3' : {event_id_3, event_id_4}
},
'user2' : {
'city1' : {event_id_1, event_id_2},
'city2' : {event_id_3, event_id_4},
'city3' : {event_id_3, event_id_4}
},
'user3' : {
'city1' : {event_id_1, event_id_2},
'city2' : {event_id_3, event_id_4},
'city3' : {event_id_3, event_id_4}
},
}
使用和维护是否简单快捷?
答案 0 :(得分:1)
你可以这样做:
用户列表
Users
useruid
name:userx
email:userx@gmail.com
useruid
name:usery
email:usery@gmail.com
Events
eventid
useruid
name:userx
location: city1
eventname: party
eventid2
useruid1
name:usery
location: city2
eventname: Boring Party
获取知道其身份和城市的活动的用户列表:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Events").child(eventid);
ref.orderByChild("location").equalTo(city1);
//retrieve users using a listener
获取知道其身份和城市的用户的活动列表:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Events");
Query q=ref.orderByChild("location").equalTo(city1);
使用侦听器,可以为您提供location:city1
答案 1 :(得分:1)
根据列出的要求,您的结构看起来很不错。最重要的是:您已经将数据存储在两个方向上,这是许多新手NoSQL数据建模的最大障碍。
关于您的数据模型的一些注释,尽管大多数都是在拼写错误的级别:
event_id_1 : {'user_1': true, 'user_2': true }
users
和events
(有关每个列表的主要信息) ,然后userEvents
和eventUsers
(两者之间的连接)。可以使用单个多位置更新来添加用户到事件,例如:
ref.update({
'/userEvents/userId1/eventId1': true,
'/eventUsers/eventId1/userId1': true
});
取消注册它们就像使用null
作为值(删除现有密钥)一样:
ref.update({
'/userEvents/userId1/eventId1': null,
'/eventUsers/eventId1/userId1': null
});