解析关系数据查询

时间:2015-03-06 23:50:07

标签: android parse-platform

我是Parse.com的新手,在设计数据库结构时遇到问题,以及如何检索所需的数据。

在数据库中,每个user(主要标识符作为电子邮件)都有一个朋友列表和一个status布尔值。好友列表包含数据库中其他用户的电子邮件。我需要为特定用户列表中的每个朋友获取status布尔值,最好是在服务器的单个查询中。

设计我们的结构并检索这些数据的好方法。目前,我制作了两个数据类(表),一个包含每个用户的布尔status,另一个包含每个用户及其朋友列表。首先,我不确定这种结构是否正确。其次,我不知道如何在单个用户朋友列表中检索每个用户的状态布尔值。

编辑我实际上昨天发现了关系列类型,但我无法弄清楚如何使用它。 1)如何在代码中将角​​色与用户链接?我知道我需要在这里使用ObjectID,但是如何?
2)如何将其他Personae(朋友)添加到单个Persona(用户)的关系中。我无法填充此关系列。我理解查询可以在关系列上使用,但是如果没有填充关系列,我就无法到达那么远 3)在我对服务器的查询中,我是否拉了整个表?让我们说用户有2个朋友。有没有办法让我只获取当前用户和两个朋友,或者是我拉整个表,然后对其进行过滤。如果我的用户表变大,我担心网络会受到负担。

编辑嗯,我还不能完全理解关系查询,但是,我找到了解决问题的好方法。由于朋友列表很少变化,我将离线维护此列表,导致向服务器发出单个查询以提取我的朋友的状态。除了这个列表,我可能也可能不会决定引入我自己的数据并获得更新的朋友列表。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

在解析中建模多对多关系的方法是使用关系列类型。这是描述用户如何拥有许多用户的朋友的最佳选择。如果这是一个类似社交网络的应用程序,另一个好建议是创建一个类 - 不同于解析用户 - 描述用户'公众人物。

这样您就可以将解析用户类保留为您的应用与真人之间的私人客户关系(这里有内置的安全约束)。另一个表,我们称之为Persona,可以为其用户提供指针类型的列,保留昵称,配置文件图像等内容,并保持您的布尔状态。

_User class - 标准解析的默认内容,以及与您的应用程序的客户关系相关的任何内容。

Persona - 指向_User表的指针,布尔状态,其他公共信息,称为"朋友"将此与其他人物相关联。

因此,考虑到登录用户和他/她当前选择的角色(您选择用户是否可能有多个角色),您可以获得朋友' personae如下(伪代码):

friendsRelation <- myPersona.friends
friendsQuery <- friendsRelation.query  // query is a method on relation
run friendsQuery asynch, then the result will be allFriendsPersonae
    for each persona in allFriendsPersonae
        status <- persona.status

如果您选择不接受角色类建议,那么&#34;代码&#34;上面是相同的,只需用户替换角色。

修改 - 回答问题编辑: 1)通过将角色的用户列(指针类型)设置为用户对象来链接用户的角色。要在以后获得该角色,当您只有一个用户时,查询角色表,其中&#34; user&#34;列等于用户。

2)Relation实现了一个add()方法。如果您有personaA,并希望将personaB添加为朋友,则在personaA上getRelation("friends"),然后发送add(personaB)

3)从关系中获得的查询只是对该关系成员的查询。因此,如果personaA有两个朋友personaB和personaC,那么当你运行personaA的朋友查询时,你只会获得B和C.