2017-10-12 242 views
1

我正在开发一个Android应用程序,大龄儿童可以捡起年幼的孩子并步行上学。随着应用程序的认证(电子邮件和密码)年轻的孩子可以选择三个地址之间得到拾取。截至目前我的实时数据库是这样的:Android - Firebase数据库结构

Database as of now

我应该命名为“不会忽略”一个新节点,有一个像这样下方的结构?

Adresses 
    Sherman Street 
    username: Jannie 

因为我要检索的街道名称和所有选择了ADRESS在ListView用户

回答

0

你的建议的方法是很好的做法:你应该尝试尽可能多的扁平化你的数据结构尽可能。

我建议使用用户的ID作为每个地址的成员资格,因此很容易识别。通过这种方式,您可以从/addresses/Sherman Street获得“谢尔曼街”成员名单,然后轻松地将其中列出的关键字与/users/的用户进行匹配。

{ 
    "users": { 
    "oXrJPVZsnMP3VKp9palSBfdnntk1": { ... }, 
    "xQDx3ntavhV3c02KFRPS8lxYfC62": { ... } 
    }, 

    "addresses": { 
    "Sherman Street": { 
     "members": { 
     "xQDx3ntavhV3c02KFRPS8lxYfC62": true 
     } 
    }, 
    "Wallaby Way": { 
     "members": { 
     "oXrJPVZsnMP3VKp9palSBfdnntk1": true 
     } 
    } 
    } 
} 

你也可以通过添加address场相匹配的地址名称的用户添加向后链接太:

{ 
    "users": { 
    "oXrJPVZsnMP3VKp9palSBfdnntk1": { ... }, 
    "xQDx3ntavhV3c02KFRPS8lxYfC62": { 
     "username": "Jannie", 
     "address": "Sherman Street" 
    } 
    }, 

    "addresses": { 
    "Sherman Street": { ... } 
    } 
} 

同时使用起来可以很容易地确定哪些用户已选择其地址,无论您目前在应用内处理哪个对象。

查看Firebase documentation on database structure了解有关如何构建数据的更多详细信息。

+0

我喜欢你的第一个解决方案,因为我想为“谢尔曼街”的孩子添加更多的属性,比如“时间到了”,所以我会试一试。感谢您的回答 – JDoe

+0

感谢您的接受,很高兴我能提供帮助。如果你愿意,你可以同时使用这两种方法,但是这意味着当用户改变他们的地址选择时,更新'/ users/$ uid/address'和'/ addresses/$ name/members'下的地址成员列表。尽管(用户到地址和用户地址)这两个对象的链接都是有用的。该文档有一个很好的例子:[更新特定字段](https://firebase.google.com/docs/database/android/read-and-write#update_specific_fields)(参见'writeNewPost()'方法)。 – Grimthorr

+0

嘿,再次感谢昨天的帮助。我发布了一个关于数据库结构的新问题。如果你有时间,欢迎来看看这个问题。 https://stackoverflow.com/questions/46732732/android-retrieving-data-from-firebase – JDoe