2016-11-25 39 views
0

我正在为狗主制作应用程序。我想在狗之间建立友谊。用户可以有n只狗和狗可以有n个朋友。我不知道如何以最有效的方式实施Firebase数据库。我想我会有一个节点的友谊,我会在这里存储信息友谊这样的:Firebase数据库中的友谊

friendships: 
    id_dog 
     id_friend_dog1: true 
     id_friend_dog2: true 

我需要得到当前的狗的朋友。此外,我需要能够获得其他尚未成为好友的狗。你将如何实现这个用例?

感谢

回答

0

你如何在建模的火力地堡的数据通常取决于你想如何使用这些数据在您的应用程序。

在你的场景中还有一个有趣的问题:友谊是双向的吗?换句话说:如果dog1是dog2的朋友,那么这是否意味着dog2必须是dog1的朋友?如果是的话,你会想它,我在Best way to manage Chat channels in Firebase

friendships: 
    id_dog1-id_dog2: true 
    id_dog1-id_dog3: true 

描述另外的方式为你说过,你会想要做的模式:保持朋友每条狗的列表。

你会看到,这意味着你保持重复数据:每个狗的朋友列表和狗之间的友谊的“主列表”。

这种数据重复在NoSQL数据库中很常见,Firebase也不例外。

更新(征求意见)中的NoSQL解决方案

数据建模总是取决于你想如何使用您的数据。如果你想得到一个特定狗的朋友列表,你应该为每只狗存储一个朋友列表。

dogFriends 
    dog1 
    dog2: true 
    dog3: true 
    dog1 
    dog1: true 
    dog3 
    dog1: true 

现在您可以通过加载/dogFriends/{dogId}轻松找出特定狗的朋友。然后循环播放这些结果并加载每个朋友的详细信息。

+0

友谊应该是双向的。如果我使用我的结构,我将如何获得狗朋友的所有信息?我可以他们的ID。我是否必须遍历它?或者你会怎么做?我需要得到照片,狗的朋友的名字和品种。 – user3637775

+0

谢谢。现在,即使在相对于我的另一篇文章的快速时间,我也会收到当前的狗的朋友。我只是好奇我怎么能得到那些目前的狗不与朋友的狗。我在这篇文章中看到了你的答案http://stackoverflow.com/questions/39195191/firebase-query-to-exclude-data-based-on-a-condition/39195551#39195551我不确定是否有可能因为我需要问一下这个ID是不是等于现在的狗。我需要按orderByKey进行过滤。你知道一些解决方案吗?我正在考虑创建一个子集,但它并不是很酷的解决方案。这可能需要时间。感谢 – user3637775

+0

正如你所说的回答,你不能测试不平等。所以你必须找到另一种方式,比如客户端过滤。 –