Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firebase数据库结构-用户、组和列表_Java_Android_Firebase_Firebase Realtime Database_Nosql - Fatal编程技术网

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

Java Firebase数据库结构-用户、组和列表,java,android,firebase,firebase-realtime-database,nosql,Java,Android,Firebase,Firebase Realtime Database,Nosql,我计划开发一款移动应用程序,使用Firebase作为其数据库/身份验证提供商,这主要是因为我发现身份验证非常容易实现,也因为应用程序的性质。该应用程序本身以用户群为中心。每个组中都有一系列数据,该组中的每个用户都可以访问这些数据 我想要一些关于我提议的firebase数据库结构的反馈,如果有什么我应该做得不同或者可以做得更好的地方 目前提议的结构: { "users": { "userID": { "userName": ...

我计划开发一款移动应用程序,使用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作为组和列表的标识符吗?因为每个组只有一个列表链接?这意味着我可以从用户“group”变量轻松访问此列表

对不起,我不能发表评论。我建议让你的生活更轻松,每个数据都有相同的ID。另外,查看userid和PushID,它们可能会很方便

要获取推送id,您可以:

 DatabaseReference mypostref = databaseRef.push();
 mypostref.setValue(data);
 String mypostref.getKey());
您将获得用户ID:

private FirebaseAuth mAuth;
mAuth = FirebaseAuth.getInstance();
FirebaseUser user = mAuth.getCurrentUser();
user.getuID
有这样的东西:

    {
        "users": {
            "userID": {
               PushID: {
                "userName": ...
                "email": ...
                "group": groupID
                "creationTime": ...
                 userID: ....
                 pushID ....
            }
          }
        }
        },

        "groups": {
            "userID": {
               PushID: {
                "name": ...
                "members": {
                    "userID": true
                    "userID": true
                     userID: ....
                     pushID ....
                }
            }
          }
        },

        "lists": {
            "userID": {
               PushID: {
                "name": ...
                "items": {
                    "itemID": true
                    "itemID": true
                     userID: ....
                     pushID ....
                }
            }
        }
      },

        "items": {
            "userID": {
               PushID: {
                "name": ...
                "createdBy": userID
                "timeCreated": ...
                 pushID ....
            }
        }
    }
  }

将userID视为主键,pushID和唯一标识符。一个用户(uID)下可以有许多数据(pushID)

Firebase数据库文档建议保持数据平面,而不是嵌套不相关类型的数据。看来你正试图这么做,所以听起来不错

如果将数据展平,则需要有一种方法将各种列表中的项目相互关联起来。最简单的方法是在所有列表中为相应的项指定相同的键。它们就像关系数据库中的PK/FK,只是Firebase(与大多数关系DBMS不同)不为您管理关系


数据建模的主题非常广泛,很难用问答的形式来公正地进行。我强烈推荐阅读和观看我们的系列。您还可以在中找到许多数据建模问题。

@Mistalis我在这个阶段没有尝试过任何东西,因为我仍在计划中。我想在实现代码之前对结构进行分类。你有没有解决过这个问题,我可以问一下,你是否想让特定组中的用户通过ta查询显示列表项?是的,这是我的想法,listID和groupID都使用“groupID”。在本例中,我将使用push ID创建组作为其groupID,然后创建一个具有相同ID的列表。要返回特定数据,需要将uID和pID存储为每个数据集的值。请将userID视为主键,pushID和唯一标识符。可能有一个用户(uID)可以拥有许多数据(pushID)。我不太明白您刚才演示的数据库示例是如何处理的。将用户ID和pushID放在一起有什么意义?为什么在组中需要userID?每个组将由多个用户使用。通过将用户id和推送id存储为值,您可以更轻松地将数据查询回Android。我相信你用过接球手/二传手?如果是,例如,您可以说getPushID是否与数据库中的PUSHID匹配,只打印该数据。感谢您的回复。对于我的列表和其中链接的项目,这些项目不会在多个列表之间共享。每个项目对于该列表都是唯一的,因此将这些项目嵌入到列表中是否有意义?