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

时间:2017-08-14 22:23:14

标签: swift database

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

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


var commentSavingDict = [Int: [String]]()
func addComment(){
    commentCount = commentCount + 1
    commentSavingDict[commentCount] = [commenterID, commentString]
}

问题是在解析仪表板中只能保存数组,而不能保存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。这也可行,但它现在使每个注释成为自己的对象,而不是被保存在特定帖子的所有注释(作为单个对象)的数组中,我认为这将是低效的并且很快占用空间。 / p>

由于我无法保存词典,有没有比我建议更好的解决这个问题的方法?或者我错误地分析了我提出的那些?

1 个答案:

答案 0 :(得分:1)

你的第三个策略是要走的路。事实上,Parse iOS Developer's Guide有一个非常熟悉的例子。每条评论都通过指针链接到原始帖子。当您检索帖子的注释时,这确实涉及额外的提取,但它比尝试将注释对象放在帖子本身的数组列中更具可伸缩性。数组列通常用于更小,更简单的集合。

这不是没有一些边缘情况的限制。例如,如果要在时间轴中显示帖子的评论计数,则必须为屏幕上的每个帖子提取所有评论。通常的解决方案是在帖子上存储一个计数器,并在添加/删除注释时更新它(理想情况下通过Cloud Code中的afterSave触发器)。

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