Firebase Отображение различных комментариев из базы данных - PullRequest
0 голосов
/ 25 августа 2018

Я создаю приложение в 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 ресторанов, это заняло бы огромное количество времени.Думайте о названиях ресторанов как о ячейках в виде таблицы, пользователи не могут добавлять рестораны, они могут только добавлять комментарии.Я был бы очень рад, если бы кто-нибудь смог мне помочь.Я знаю, что сообщение немного длинное, но я просто хотел убедиться, что все ясно.Заранее большое спасибо!

1 Ответ

0 голосов
/ 25 августа 2018

Хорошо, так обо всем по порядку; если вы беспокоитесь о том, что не сможете хранить данные в каком-либо месте в Firebase, потому что там нет ресторанного узла, не беспокойтесь.

Когда вы пишете в местоположение (скажем, comments/restaurantNameOrIDHere/comment1/), если какой-либо узел на этом пути не определен (скажем, comments или restaurantNameOrIDHere), Firebase создаст этот узел для вас.

С этим вне пути к структуре базы данных. Есть два способа, которые сразу же бросаются в глаза.

  1. Сохраните название / идентификатор ресторана в комментарии и сохраните все комментарии в узле comments/.

    • Плюсы: это делает вашу базу данных более ровной и более нормализованной, учитывая, что в комментарии достаточно информации, чтобы вы знали, к какому ресторану он принадлежит.
    • Минусы: для этого потребуется добавить поле к объекту комментариев. Это также означает, что запрос комментариев для конкретного ресторана обходится дороже. Он либо должен получить все комментарии, а затем отфильтровать те, которые не относятся к рассматриваемому ресторану, либо он должен отфильтровать запрос Firebase, который обходится дороже на стороне Firebase.
  2. Хранить комментарий под узлом названия / идентификатора ресторана, например comments/reallyCoolRestaurant/.

    • Плюсы: это позволяет вам начинать хранить свои комментарии как есть под названием / идентификатором ресторана, что означает меньше времени на разработку. Это также делает запрос всех комментариев для данного ресторана невероятно дешевым и легким.
    • Минусы: доступ ко всем комментариям становится немного сложнее, учитывая, что они распределены по множеству различных ресторанных узлов.

Я бы лично склонялся к комбинации этих двух по следующим причинам:

  • Хранение комментариев в ведрах в зависимости от того, к какому ресторану они принадлежат, позволяет легко и эффективно запрашивать комментарии ресторана.

  • Хранение ресторана, к которому принадлежит комментарий, может оказаться полезным в будущих случаях, когда вы захотите извлечь и проанализировать комментарии для ресторанов.

Если вы хотите сохранить простоту и просто выбрать один, я бы выбрал второй вариант.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...