我正在计划使用Firebase作为其数据库/身份验证提供程序的移动应用程序,主要是因为我发现身份验证非常容易实现,并且还因为应用程序性质。该应用程序本身围绕着群组中的用户。每个组中都有一组数据,该组中的每个用户都可以访问这些数据。
我想要对我建议的firebase数据库结构提出一些反馈,如果有什么我应该做的不同或者可以做得更好。
目前提出的结构:
{
"users": {
"userID": {
"userName": ...
"email": ...
"group": groupID
"creationTime": ...
}
},
"groups": {
"groupID": {
"name": ...
"members": {
"userID": true
"userID": true
}
}
},
"lists": {
"groupID": {
"name": ...
"items": {
"itemID": true
"itemID": true
}
}
},
"items": {
"itemID": {
"name": ...
"createdBy": userID
"timeCreated": ...
}
}
}
以下是我想澄清的一些事项:
分隔列表和组是明智的还是我应该在每个列表对象中嵌入项目?
我可以使用groupID作为组和列表的标识符,因为只有一个列表链接到每个组吗?这意味着我可以轻松地从用户访问此列表“组“变量。
答案 0 :(得分:1)
Firebase数据库文档建议保持数据平整,而不是嵌套不相关的数据类型。看来你正试图这样做,听起来不错。
如果您展平数据,则需要有办法将各个列表中的项目相互关联。最简单的方法是在所有列表中为相应的项提供相同的键。它们就像关系数据库中的PK / FK,除了Firebase(与大多数关系型DBMS不同)不管理你的关系。
数据建模的主题非常广泛,在Q& A格式中很难做到这一点。我强烈建议您阅读NoSQL data modeling并查看我们的Firebase for SQL developers系列。您还可以在this list中找到大量数据建模问题。
答案 1 :(得分:0)
抱歉,我无法发表评论。我建议让您的生活更轻松,每个数据都具有相同的ID。另外,查看userID和PushID,它们可能会派上用场。
要获得推送ID,您可以:
drwx------
Lrwxr-xr-x
drwxr--r--
drwx------
drwx------
prw-r--r--
Srw-rw-rw-
Srw-rw-rw-
-rw-r--r--
你得到了userID:
<select id = "email_templates" ng-model="selected" name = "email_templates" class="chosen-select input-md form-control" ng-change = "alert('template selected');">
<option value="0">No template selected</option>
<option value="1">Template 1</option>
</select>
有这样的事情:
DatabaseReference mypostref = databaseRef.push();
mypostref.setValue(data);
String mypostref.getKey());
将userID视为主键,pushID和唯一标识符。可以有一个用户(uID)可以拥有许多数据(pushID)