使用解析实现Hashtag多对多关系?

时间:2013-08-04 07:57:22

标签: iphone ios many-to-many database-schema parse-platform

我最近发现在我的应用程序中使用后端作为服务平台的能力很好,但问题是没有很多教程可以指导您在这些平台上实现如此多的特殊数据库结构,所以我想出了这个流行的场景以获得一些清晰度

结构是用户可以写一个帖子并附加主题标签(最多为'n'),这些主题标签显然可以附加到很多帖子,这是典型的多对多关系场景你会如何建议数据库用于执行以下查询的结构?

  1. 用户表有一个位置列,查询是获取当前用户位置50英里内特定主题标签的所有帖子吗?
  2. 围绕当前用户位置的热门主题标签(附加到由其他用户创建的帖子)
  3. P.S。这些是我能想到的一些一般情况,如果你认为对Parse社区有帮助,可以在你的答案中附加任何其他流行的场景。

1 个答案:

答案 0 :(得分:1)

Parse不提供完整的关系数据库,但您可以向数据类添加关系列,这允许类之间的多对多关联。例如,您可以使用hashtag类,并在包含其关联主题标签的post类中添加关系列。可以通过针对hashtag类构建查询来响应查询1,指定所需的主题标签,然后将其作为查询的子查询添加到post类。在您的包含查询中,您指定您在用户所在位置附近寻找post。 E.g。

PFQuery *tagQuery = [PFQuery queryWithClassName:@"hashtag"];
[tagQuery whereKey:@"tagName" equalTo:@"hash_tag_name"];

PFQuery *postQuery = [PFQuery queryWithClassName:@"post"];
[postQuery whereKey:@"hashtags" matchesQuery:tagQuery];
[postQuery whereKey:@"location" nearGeoPoint:userLocation withinMiles:50.0];

[postQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    //Do something with results
}];

我想不出用一个Parse查询拉出第二个查询数据的简单方法。一种方法是仅检索当前位置附近的post,然后迭代它们以确定与每个标记相关联的标记(并计算它们的频率)。

另一种选择是将标签存储为针对帖子的字符串数组。然后,您可以使用whereKey:equalTo:(单个标记)或whereKey:containedIn:(多个标记)按标记进行查询。使用这种方法,您需要跟踪其他地方存在哪些标记。