Firebase数据库结构 - 用户,组和列表

时间:2017-01-30 09:17:32

标签: java android firebase firebase-realtime-database nosql

我正在计划使用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作为组和列表的标识符,因为只有一个列表链接到每个组吗?这意味着我可以轻松地从用户访问此列表“组“变量。

2 个答案:

答案 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)