我正在开发一个简单的 JavaScript Twitter 克隆,它使用 Firebase 作为后端存储机制 (JSON)。我熟悉关系数据库 (SQL),但不熟悉非关系数据库。我目前正在尝试找出如何在 Firebase 中设计数据集的结构,因为没有外键关系或表连接。
应用程序有三个表,users
、tweets
和 followers
。用户可以发布推文,也可以关注其他用户并查看他们的推文提要。尝试创建数据结构时出现问题,因为我不知道如何连接必要的表。例如,我将如何实现用户关注者功能?
这是我用来给自己一个起点的 ERD:
因为我一直在努力思考整个 JSON 的事情,这是我能将它与关系数据库联系起来的最接近的方式,同时仍然使用 Firebase .push()
函数添加到数据库中的列表(从 Firebase 仪表板可以看出):
我看到有人试图通过“去规范化”数据来解决这个问题,理由是 Firebase 没有任何查询机制。然而,这些文章主要是在 2014 年之前,也就是 Firebase 确实添加查询的时候。话虽这么说,但我不明白使用查询对我有何帮助,而且我认为我被生成的 key 困住了。
我应该如何最好地构建我的数据以使用 Firebase JSON 列表?我已经阅读了他们的一些文档,但无法找到任何使用我正在寻找的内容和生成的 key 的内容。
我是否应该尝试以某种方式使用 .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"
}
}
让我知道是否还应该包含任何其他内容!
最佳答案
一般来说,在非关系数据库或 noSQL 数据库中表示关系是通过嵌入文档(行的 noSQL 措辞)或通过文档引用来解决的,就像您在示例解决方案中所做的那样。
MongoDB 站点有一些不错的文章,主要适用于所有非关系数据库,包括 Model One-to-Many Relationships with Document References ,我认为这与您的问题最相关。
就引用 key 而言,通常最佳做法是使用生成的 ID,因为您可以保证它们是唯一的。
关于javascript - 如何将 Firebase 用作具有生成键(JS)的关系数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36585221/