Swift 如何构造数据以保存用户评论?

Swift 如何构造数据以保存用户评论?,swift,database,Swift,Database,我正在使用xcode编写iOS应用程序。我想在应用程序中设置一个部分,用户可以在其中留下评论。对于如何存储特定帖子的评论集,我有点困惑。我基本上只需要保存每个评论三件事。用户ID、评论本身和评论编号(即为该帖子发布的第一条评论,或第二条、第三条等),但我不知道如何最好地将其保存到数据库中。我使用parse server作为主要数据库,问题是,虽然该数据库可以存储对象的多个属性,但保存字典是不可能的。(我本想将信息另存为): 期望的策略(但不起作用) 问题在于,在parse dashboard中,

我正在使用xcode编写iOS应用程序。我想在应用程序中设置一个部分,用户可以在其中留下评论。对于如何存储特定帖子的评论集,我有点困惑。我基本上只需要保存每个评论三件事。用户ID、评论本身和评论编号(即为该帖子发布的第一条评论,或第二条、第三条等),但我不知道如何最好地将其保存到数据库中。我使用parse server作为主要数据库,问题是,虽然该数据库可以存储对象的多个属性,但保存字典是不可能的。(我本想将信息另存为):
期望的策略(但不起作用)

问题在于,在parse dashboard中,只能保存数组,而不能像
commentSavingDict
那样保存字典。我只是粗略地考虑保存它的字符串:

第二战略

var commentCount = 5 //will hold value of number of comments for post
var commentString = "hello"
var commenterID = "e1das312"


var commentSavingArray = [String]()
func addComment(){
    commentCount = commentCount + 1
    commentSavingArray.append("\(commentCount) :::: \(commentString) :::: \(commenterID)")
}
这种方法可行,但需要从数组中提取每个条目,然后在
::
位置使用
.split
分隔字符串,将每个部分转储到3个单独的数组中,然后以这种方式使用它们。这将需要更长的时间,因为拆分需要在客户端进行

第三战略
我设想的最后一种方法是让每条评论在数据库中成为自己的对象,具有四种不同的性质:评论的数量、评论、帖子的ID和用户的ID。这也会起作用,但现在它使每条评论成为自己的对象,而不是保存在所有评论的数组中(作为单个对象)对于一个特定的职位,我认为这将是低效的,并迅速使用空间


既然我不能保存字典,有没有比我建议的更好的方法来解决这个问题?还是我没有正确分析我提出的策略?

你的第三个策略是正确的。事实上,有一个非常熟悉的例子。每个评论都通过指针链接到原始帖子。当您要检索帖子的评论时,这确实涉及到额外的获取,但是它比试图将评论对象放在帖子本身的数组列中更具伸缩性。数组列通常对较小、更简单的集合更有用

这并非没有一些边缘案例限制。例如,若您想在时间轴中显示一篇文章的评论计数,您必须获取屏幕上每篇文章的所有评论。通常的解决方案是在帖子本身上存储一个计数器,并在添加/删除评论时更新它(理想情况下通过云代码中的
afterSave
触发器)


另一个注意事项-您可能可以避免存储“注释编号”,而是依赖注释
createdAt
date。您可以通过在帖子上进行筛选并按创建日期排序来检索您的评论。

感谢您的回复和指南链接!不过,你能谈谈我对它的担忧吗?与其他方法相比,为每个注释创建单独的对象是否会增加对象的数量,从而不会使数据库陷入困境?这样想吧,您不会因为每行存储一个对象而创建更多或更少的对象。这仍然是相同数量的信息。事实上,在数据级别使用单独的对象可能会更有效,因为这是它所期望的结构,并且已经针对它进行了优化。
var commentCount = 5 //will hold value of number of comments for post
var commentString = "hello"
var commenterID = "e1das312"


var commentSavingArray = [String]()
func addComment(){
    commentCount = commentCount + 1
    commentSavingArray.append("\(commentCount) :::: \(commentString) :::: \(commenterID)")
}