如何将Firebase用作生成密钥(JS)的关系数据库?

Ken*_*all 12 javascript database json non-relational-database firebase

我正在使用Firebase作为后端存储机制(JSON)的简单JavaScript Twitter克隆.我熟悉关系数据库(SQL),但不熟悉非关系数据库.我目前正在尝试研究如何在Firebase中设计数据集的结构,因为没有外键关系或表连接.

该应用程序有三个表,users,tweets,和followers.用户可以发布推文,也可以关注其他用户并查看推文的摘要.尝试创建数据结构时会出现问题,因为我不知道如何加入必要的表.例如,我将如何实现用户关注功能?

这是我用来给自己起点的ERD:

应用程序的ERD

正如我一直在试图环绕这整个事情的JSON我的头,这是最接近的,我可以将它与关系数据库,同时仍使用火力地堡的.push()功能添加到列表数据库(从火力地堡看到仪表板):

Firebase尝试

我看到有些人试图通过"取消规范化"数据来解决这个问题,理由是Firebase没有任何查询机制.然而,这些文章都主要是在2014年之前,也就是当火力地堡添加查询.话虽如此,我不明白使用查询如何帮助我,我想我已经陷入了生成的密钥.

我应该如何最好地构建我的数据以使用Firebase JSON列表?我已经阅读了他们的一些文档,但无法找到任何使用我正在寻找的东西和生成的密钥.

我应该尝试以.set()某种方式使用该方法,并使用电子邮件地址作为用户的"主键"而不是生成的密钥?[如下所述,这是我计划避免的事情.谢谢@metame]

更新

这更像是我应该关注的数据结构吗?然后按键查询?

users: {
    Hj83Kd83: {
        username: "test",
        password: "2K44Djl3",
        email: "a@b.c"
    },
    J3kk0dK4: {
        username: "another",
        password: "33kj4l5K",
        email: "d@e.f"
    }
}

tweets: {
    Jkk3ld92: {
        userkey: "Hj83Kd83",
        message: "Test message here!"
    },
    K3Ljdi94: {
        userkey: "J3kk0dK4",
        message: "Another message here!"
    }
}

followers: {
    Lk3jdke9: {
        userkey: "Hj83Kd83",
        followerkey: "J3kk0dK4"
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我还要包含其他内容,请告诉我!

met*_*ame 6

在非关系数据库或 noSQL 数据库中表示关系通常是通过嵌入文档(行的 noSQL 措辞)或通过文档引用来解决的,就像您在示例解决方案中所做的那样。

MongoDB 站点有一些不错的文章,主要适用于所有非关系数据库,包括Model One-to-Many Relationships with Document References,我认为这与您的问题最相关。

至于引用键,通常最好使用生成的 ID,因为您可以确保它们是唯一的。