Как связать разные объекты данных в 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
,