swift Firebase数据库架构-类似Snapchat

krcsximq  于 2023-08-02  发布在  Swift
关注(0)|答案(1)|浏览(107)

我想用Firebase创建一个应用程序。
我有两个主要目标这个应用程序:
1.获取好友关系
1.发送图片给朋友
在我的Firestore数据库中,我有“用户”集合,用户ID作为文档,ID和电子邮件字段。(用户> id > id,电子邮件)。当一个用户注册时,我发送数据库中的信息。

db.collection("users").document(currentUser.uid).setData([
            "id": currentUser.uid,
            "email": currentUser.email ?? ""
        ]) { err in
            if let err = err {
                print("Error writing document: \(err)")
            } else {
                print("Document successfully written!")
            }
        }

字符串
我想如果我想照顾朋友关系,我必须在文档用户(用户> ID > ID,电子邮件(字段))中添加集合... friendsRelationship(collection)> id(users added as field))。
并在其他用户文档中添加id user(targetedUser)-->双向。
当一个用户删除另一个用户时,我们必须从currentUser和targetedUser中删除friendsRelationship集合中的id。
在Firebase中是否有其他解决方案/更好的数据库架构用于好友关系?
当朋友关系完成后,我们必须将图片发送给targetedUser。
我宁愿做users > id > images(collection)> url,date(fields).或者images > id(generated)> fromUser(id),toUserId(collection)> id?
如何查询当前用户收到的所有图片?像db.collection("users").document(currentUser.uid) ...
以下是我的Cloud Firestore数据库的屏幕截图:https://i.stack.imgur.com/rqSTl.jpg
我不知道如何管理与此的朋友关系,并张贴像snapshat,当firstUser发送快照给其他用户.
谢谢你的建议!

b1uwtaje

b1uwtaje1#

我想如果我想照顾朋友关系,我必须在文档用户(用户> ID > ID,电子邮件(字段))中添加集合... friendsRelationship(collection)> id(users added as field))。
你存储用户数据的方式对我来说很好。
在Firebase中是否有其他解决方案/更好的数据库架构用于好友关系?
关于朋友关系,还有另一种可能的解决方案,它不需要创建子集合,您可以简单地将每个朋友ID添加到用户文档的数组中。新模式可能如下所示:

Firestore-root
   |
   --- users
        |
        --- uid
             |
             --- email: "name@email.com"
             |
             --- id: "userId"
             |
             --- friendIds: ["friendIdOne", "friendIdTwo", "friendIdThree"]

字符串
这将工作得很好只有如果文件的大小不会达到限制。因此,在文档中可以放入多少数据方面存在一些限制。根据有关usage and limits的官方文档:
文档的最大大小:1 MiB(1,048,576字节)
如您所见,单个文档中的数据总量限制为1 MiB。当我们谈论存储文本时,你可以存储很多。
如果您认为文档的大小可能会超过这个限制,那么将朋友作为文档存储在单独的集合中的解决方案将解决您的问题。
并在其他用户文档中添加id user(targetedUser)-->双向。
要建立双向关系,在上面的解决方案中,您只需将friendId复制到用户的friendIds数组中,并将userId复制到朋友的friendIds数组中。
当一个用户删除另一个用户时,我们必须从currentUser和targetedUser中删除friendsRelationship集合中的id。
在上面的解决方案中,您应该从friendIds数组中删除userId,并从用户的friendIds数组中删除friendId
我宁愿做users > id > images(collection)> url,date(fields).或者images > id(generated)> fromUser(id),toUserId(collection)> id?
在这种情况下,您还可以使用数组来存储图像引用。同样,如果您认为文档的大小可能会超过这个限制,那么将图像作为文档存储在单独的集合中的解决方案是可以继续使用的解决方案。
如何查询当前用户收到的所有图片?比如db.collection(“users”).document(currentUser.uid)...
是,通过获取对用户文档的引用:

db.collection("users").document(currentUser.uid)


然后阅读images数组。

相关问题