Swift Firebase显示来自数据库的不同注释

Swift Firebase显示来自数据库的不同注释,swift,firebase,firebase-realtime-database,Swift,Firebase,Firebase Realtime Database,我正在Swift中创建一个类似于餐馆评级应用程序的应用程序,用户可以在不同的餐馆上发表评论。现在,我可以用下面的代码成功地将用户的评论保存到数据库中。我的应用程序不需要注册或登录屏幕,用户可以根据自己的意愿直接评论,因此我将currentUserID设置为匿名 @IBAction func OnSubmitTouched(_ sender: UIButton) { if (textField.text != ""){ let ref = Database.database

我正在Swift中创建一个类似于餐馆评级应用程序的应用程序,用户可以在不同的餐馆上发表评论。现在,我可以用下面的代码成功地将用户的评论保存到数据库中。我的应用程序不需要注册或登录屏幕,用户可以根据自己的意愿直接评论,因此我将currentUserID设置为匿名

@IBAction func OnSubmitTouched(_ sender: UIButton) {
    if (textField.text != ""){

       let ref = Database.database().reference()
       let commentsReference = ref.child("comments")
       let newCommentID = commentsReference.childByAutoId().key
       let newCommentReference = commentsReference.child(newCommentID)
       // guard let currentUser = Auth.auth().currentUser else {
       //     return
       // }
        var currentUserID = "anonymous"
        if let currentUser = Auth.auth().currentUser {
               currentUserID = currentUser.uid
        }
       // let currentUserID = currentUser.uid
        newCommentReference.setValue(["uid": currentUserID, "commentText": textField.text!]) { (error, ref) in
            if error != nil {
                print(error!.localizedDescription)
                return
            }
}
现在的问题是,当向其他用户显示这些评论时,我如何才能将餐馆上的评论分开,这样所有餐馆就不会有完全相同的评论部分?在仪表板中,我可以为每个餐厅的评论记录创建子记录,但是,应用程序中有1000多家餐厅,这将花费大量时间。将餐厅名称视为tableview中的单元格,用户不能添加餐厅,只能添加注释。
如果有人能帮我,我会很高兴的。我知道帖子有点长,但我只是想确保一切都清楚。提前非常感谢

好吧,首先要做的事;如果您担心由于餐厅节点不存在而无法在Firebase中的某个位置存储数据,请不要担心

当您写入某个位置(例如
comments/restaurantnameoridher/comment1/
)时,如果沿途没有定义任何节点(例如
comments
restaurantnameoridher
),Firebase将为您创建该节点

有了这些,我们就可以开始数据库结构了。有两种方法可以让我立刻跳出来

  • 将餐厅名称/id存储在注释上,并将所有注释存储在
    comments/
    节点下

    • 优点:这可以让你的数据库更平坦、更规范,因为评论有足够的信息让你知道它属于哪家餐厅
    • 缺点:这需要您向comments对象添加一个字段。这也意味着查询特定餐厅的评论会更加昂贵。它要么获取所有评论,然后过滤掉那些不属于该餐厅的评论,要么在Firebase查询上进行过滤,这在Firebase方面成本更高
  • 将注释存储在餐厅名称/id节点下,例如
    comments/reallycooltrestaurant/

    • 优点:这允许您开始以餐厅名称/id的形式存储评论,这意味着现在开发时间更短。这也使得为一家给定的餐厅询问所有评论变得难以置信的便宜和容易
    • 缺点:鉴于评论分布在许多不同的餐厅节点,访问所有评论变得稍微麻烦一些
  • 我个人倾向于将两者结合起来,原因如下:

    • 根据评论所属的餐厅将评论存储在桶中,这样询问餐厅的评论既简单又高效

    • 存储评论所属的餐厅可能在将来的情况下非常有用,因为您可能希望提取并分析餐厅的评论


    如果您想保持简单,只选择一个,我会选择第二个选项。

    如果我正确理解您的问题,您会问如何以合理的方式构建Firebase数据库,以便检索每个餐厅的特定评论。你还担心必须用所有餐馆的名字填写数据库,这样评论才能有地方住。听起来是这样吗?还有什么会阻止你在评论中存储诸如餐馆名称/id之类的东西(假设评论是在餐馆上发表的)?@ScottChow是的,这是正确的。用于存储带有注释的餐厅名称,如我在问题中所说,有1000多家餐厅,因此需要一些时间才能将它们全部输入数据库。但是,如果这是唯一的方法,那么我仍然不能100%确定如何实现编码和编辑firebase数据库。我是否应该在real comments记录下创建1000个不同的餐厅子记录,然后执行1000条if-else语句将它们正确链接到我的子记录?非常感谢您的帮助:-)非常感谢您的详细回答!我想我可以使用第二种选择。为了确保我的想法正确,我不需要手动在firebase数据库的“我的父亲”注释节点下创建每个餐厅的1000个(餐厅数量)节点。在XCode中,我可以用1000条if-else语句检入用户点击的餐厅(tableview单元格),这样我就可以知道用户选择了哪家餐厅,然后使用语句comments/chosenRestaurantName/I是否在正确的轨道上向firebase数据库添加一个节点?好的,我想我现在已经找到了!!!非常感谢你的帮助!!!我建议您使用单击的单元格的索引来确定单击的餐厅。