Как связать разные объекты данных в Firebase 3 друг с другом с помощью Swift?

Я знаю, что в SQL для сопоставления 2 разных объектов один из них будет использовать первичный ключ в 1 таблице и внешний ключ в другой таблице. Поскольку FirebaseDatabase использует JSON/NoSQL, это невозможно. Если бы у меня было 2 объекта: UserPostEntity и PostEntity, после того, как пользователь сделал сообщение / комментарий, как бы я связал UserPostEntity с PostEntity и как PostEntity будет автоматически обновляться с этим сообщением / комментарием, сделанным пользователем?

Объект UserEntity:

import Foundation

    class UserEntity{

        var userID: String
        var postedComment: String
        var postDate: String
        var postID: PostEntity

        init(userID: String, postedComment: String, postDate: String, postID: PostEntity){
            self.userID = userID
            self.postedComment = postedComment
            self.postDate = postDate
            self.postID = postID
        }
    }

PostEntity Object:

import Foundation

class PostEntity{

    var userID: String
    var postID: String
    var postedComment: String
    var postDate: String

    init(userID: String, postID: String, postedComment: String, postDate: String){
        self.userID = userID
        self.postID = postID
        self.postedComment = postedComment
        self.postDate = postDate
    }
}

1 ответ

Решение

Было бы лучше, если бы вы могли структурировать свои данные в Firebase. Вот ссылки, которые обеспечивают хорошую интуицию о структурировании данных в Firebase:

https://firebase.googleblog.com/2013/04/denormalizing-your-data-is-normal.html https://www.firebase.com/docs/web/guide/structuring-data.html

Вы можете определить свой user стол и posts следующим образом:

user{
    "u1" {

         userName : "abc",
         posts {
              p1 : true,
              p2 : true
          }
        },

        "u2" {

         userName : "def",
         posts {
              p3 : true,
              p4 : true
          }
        }

  }

  post{
        "p1"{
            userId : "u1",
            postComment : "hello ios",
            postDate : "1467570919"
            },
        "p2"{
            userId : "u1",
            postComment : "ios",
            postDate : "1467570920"
            },
        "p3"{
            userId : "u2",
            postComment : "hello ios",
            postDate : "1467570921"
            },
        "p4"{
            userId : "u2",
            postComment : "hello ios",
            postDate : "1467570922"
            }
    }

Также вы можете создавать свои объекты следующим образом:

class UserEntity{

        var userID: String
        var userName : String
        var posts: Dictionary<String, Bool>?
        var ref : FIRDatabaseReference?

        init(userID: String, userName: String, posts: Dictionary<String, Bool>?){
            self.userID = userID
            self.userName = userName
            self.posts = posts
            self.ref = nil
        }
    }


    class PostEntity{

    var pId: String
    var uId: String
    var postedComment: String
    var postDate: NSTimeInterval
    var ref : FIRDatabaseReference?

    init(pId: String, uId: String, postedComment: String, postDate: NSTimeInterval){
        self.pId= pId
        self.uId = uId
        self.postedComment = postedComment
        self.postDate = postDate
        self.ref = nil
    }
}

Также вы хотели бы структурировать UserEntity а также PostEntity Сущность, как ответил в этом посте.

Вы должны обновить posts атрибут user стол как p5 :true, когда новый пост p5 добавлен пользователем u1,

Другие вопросы по тегам