我有一个需要存储这些对象的应用程序
User
{
auto-generated-id: String,
name: String,
schoolID: String,
myClasses: String[]
}
School
{
auto-generated-id: String,
name: String,
adress: String
}
Classes
{
auto-generated-id: String,
number: String,
subject: String,
schoolID: String
}
但是我不熟悉NoSQL结构,不确定如何存储这些对象以进行高效查询
我的应用程序将提供班级主题、班级编号、学校 ID
我需要的查询
1(
select *
from School s, Classes c
where c.subject = 'ABC' and c.number = '100', and c.schoolID = "1234"
2(
select c.*
from User u, Classes c, School s
where u.auto-generated-id = "1234" and u.schoolID = s.schoolID and c.schoolID = s.schoolID
我可以重新排列我的模式以适应 nosql 方法并仍然执行查询的最佳方法是什么
此外,由于我的结构不佳,我不断收到以下警告
使用未指定的索引。您的数据将在客户端上下载和过滤。考虑在 somePath 中添加 ".indexOn": "classNum" 到您的安全规则中,以获得更好的性能
试试这个数据库结构:
Users
userid
name:userx
email: userx@gmail.com
userid
name:usery
email:usery@gmail.com
Schools
pushid
name:school1
address: at stackoverflow
pushid
name:school2
address:ios section
Classes
pushid
number:1
subject: Firebase
schoolname: school1
pushid
number:2
subject:ios development
schoolname:school2
UserClass
userid<---------if of userx
randomid
classname: Firebase
schoolname: school1
userid<--------------if of usery
randomid
classname:ios developement
schoolname: school2
检查这个:
https://firebase.googleblog.com/2013/04/denormalizing-your-data-is-normal.html
在Firebase中没有joins
或where clause
。您只能指定一个路径,因此不能使用两个表,只有一个顶部节点并遍历其他节点,例如:child("Users").child(userid)