如何使用 Swift 将 Firebase 3 中的不同数据对象相互关联?
How to associate to different data objects in Firebase 3 with each other using Swift?
我在 SQL 中知道要将 2 个不同的对象相互关联,其中一个将使用 1 table 中的主键和另一个 table 中的外键。由于 FirebaseDatabase 使用 JSON/NoSQL 这是不可能的。如果我有 2 个对象,分别是 UserPostEntity 和 PostEntity,一旦用户创建了 post/comment,我将如何将 UserPostEntity 与 PostEntity 相关联,以及如何使用用户创建的 post/comment 自动更新 PostEntity?
用户实体对象:
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 对象:
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
}
}
如果你能在 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
table 和 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
}
}
此外,您还需要按照 post.
中的回答构建 UserEntity
和 PostEntity
实体
当添加新的 post p5
时,您必须将 user
table 的 posts
属性更新为 p5 :true
用户 u1
.
我在 SQL 中知道要将 2 个不同的对象相互关联,其中一个将使用 1 table 中的主键和另一个 table 中的外键。由于 FirebaseDatabase 使用 JSON/NoSQL 这是不可能的。如果我有 2 个对象,分别是 UserPostEntity 和 PostEntity,一旦用户创建了 post/comment,我将如何将 UserPostEntity 与 PostEntity 相关联,以及如何使用用户创建的 post/comment 自动更新 PostEntity?
用户实体对象:
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 对象:
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
}
}
如果你能在 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
table 和 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
}
}
此外,您还需要按照 post.
中的回答构建UserEntity
和 PostEntity
实体
当添加新的 post p5
时,您必须将 user
table 的 posts
属性更新为 p5 :true
用户 u1
.