gpt4 book ai didi

android - 为 Firebase 设计数据结构

转载 作者:太空狗 更新时间:2023-10-29 16:12:59 26 4
gpt4 key购买 nike

警告:我的查询将更具理论性(抱歉程序员,请耐心等待)。我正在尝试了解如何定义在 Firebase 中使用的数据库结构。

我正在探索使用 Firebase 作为我正在尝试构建的评论应用程序(在 Android 中)的后端。

该应用程序提供了不同种类产品的产品详细信息和评论。所以这是一个示例用例。

  1. 应用中显示的产品属于同一类型(例如智能手机)。在此用例中,定义数据库结构更容易。对于每部手机,我只需要将手机规范保存到 Firebase 并将它们检索到我的应用程序中。
Root
|
+--Smartphone
|
+--Manufacturer Name
+--Screen Size
+--Screen Density
+--Processor
+--RAM,...
  1. 应用中显示的产品类型不同(例如智能手机、汽车、书籍...)。在此用例中,定义数据库结构变得复杂。我可以简单地定义数据结构,如
Root
|
+--Product
|
+--Manufacturer Name
+--Screen Size
+--Screen Density
+--Processor
+--RAM
+--Fuel type (Petrol/Diesel/Electric)
+--Vehicle Type (Sedan/Hatchback)
+--Vehicle Price,...

但是,上述数据结构的问题是,当我尝试对智能手机进行产品评论时,与 Car 相关的数据将保持空白。汽车的产品评论也是如此。

这个问题可以通过Flattening the data structure来解决。这是我感到困惑的地方。

Root
|
+--Smartphone
| |
| +--Manufacturer Name
| +--Screen Size
| +--Screen Density
| +--Processor
| +--RAM
|
+--Car
|
+--Fuel type (Petrol/Diesel/Electric)
+--Vehicle Type (Sedan/Hatchback)
+--Vehicle Price,...

但是,所有产品评论都将显示在单个 Activity/fragment 中。因此,每种产品类型不会有不同的 Activity/fragment 。有人可以为我提供在我的用例中使用扁平化数据结构的清晰图片吗?

问候

最佳答案

您可以像这样构建您的数据库:

products: {
smartphones: {
smartphone1: {
name: "Best Phone",
ram: "6 GB",
screen: "5.5 inch"
reviews: {
review1: true,
review2: true
}
}
},
cars: {
car1: {
name: "Lightning"
reviews: {
review3: true,
review4: true,
review5: true
}
}
}
},
product-review: {
review1: {
submittedBy: "Conqueror",
message: "Best phone at this price",
timestamp: 1472405901
},
review2: {
submittedBy: "Magic Blaster",
message: "Pros: RAM, Cons: Everything else.",
timestamp: 1472405901
},
review3: {
submittedBy: "Boss",
message: "Excellent Car",
timestamp: 1472405901
},
...
}

每个产品(smartphone1、car1 等)都包含一个评论节点,因此您可以轻松加载特定产品的链接评论。

您可以为您想要的节点生成时间戳。您可以为 smartphone1、car1 等添加它。但这不是必需的。但是用户评论需要时间戳,因为您应该在用户发布评论时显示。

看看this answer了解如何生成时间戳并将时间戳转换回可显示日期:

DateFormat sdf = new SimpleDateFormat("MM-dd-yyyy hh:mm:ss a");
Date someDate = (new Date(timestamp));
return sdf.format(someDate);

您可以将用户评论存储在他们各自的节点中。

users: {
abcdefghijklm: { // User UID
name: "Conqueror",
reviews: {
review1: smartphone1,
review7: car1
}
},
nopqrstuvwxyz: {
name: "Magic Blaster",
reviews: {
review2: smartphone1
}
}
}

要获取特定用户的评论,您可以获取用户的 uid 并使用它来显示评论。不幸的是,我从未在 Android 上使用过 Firebase,在 Javascript 中,我会这样做:

firebase.database().ref('users/'+userUID+'/reviews').on('value', function(snapshot) {
firebase.database().ref('product-review/'+snapshot.key).on('value', function(reviewSnapshot) {
console.log(reviewSnapshot.val().message);
});
});

如果您只想看到用户“Conqueror”的评论,请将userUID 设置为他的唯一ID。 Here是 Firebase for Android 的官方文档,用于从数据库中检索数据。

关于android - 为 Firebase 设计数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39206688/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com