【问题标题】:Structuring Firebase DB构建 Firebase 数据库
【发布时间】:2017-08-08 19:27:07
【问题描述】:

我最近开始使用 firebase 并尝试在我的 Android 应用程序中以 NoSql 方式重塑我的数据。我当前的结构是 MIX --- > MIXTITLE ----> MIXDETAILS (此组合的所有细节)。我见过很多按 UID 排序项目的结构,但我如何将其与用户联系起来并避免每个用户有一堆重复记录?

例如,用户可以将歌曲添加到库中,并且该库具有三个选项卡,一个用于所有歌曲,一个用于播放列表,一个用于收藏夹。按 UID 存储 MIX 不会让我查询找到该混合已添加到用户库的所有 MIXES。

更好的方法是对数据进行非规范化并创建一个 USERMIX 节点来列出用户 UID 下的所有 MIX 吗?

【问题讨论】:

  • UID 代表用户 ID。 UID 是 Firebase 在内部跟踪经过身份验证的用户的方式,即在创建用户时,会为他们分配一个 UID,然后该 UID 可用于创建您自己的 /users 节点,您可以在其中存储有关每个用户 /users/uid_0 和 /users 的附加信息/uid_1 等。如果您想创建唯一键来存储其他类型的数据,通常通过 childByAutoId() (swift) 或 push() 完成。如果您的问题中没有关于您的用例和平台的更多信息,我们将无法提供更多信息,
  • 在 Firebase 中建模数据是一个非常广泛的话题。最好的模型是适用于您的用例的模型。这有点不建议,但实际上非常重要:在 NoSQL 中,您通常最终会为应用程序的用例扩充数据模型。我建议阅读NoSQL data modeling 并观看Firebase for SQL developers

标签: android json firebase firebase-realtime-database nosql


【解决方案1】:

据我了解,可能是这样的一个例子。

allSongs
- sid1
- sid2
..
users
- uid1
- uid2
..
favorites
-uid1
--sid1:true
--sid5:true
..
playlists
-uid1
--sid2:true
--sid7:true
--sid12:true
..

【讨论】:

  • 您好,谢谢您的回答!我实际上对此有一个后续问题。例如,我如何在这个结构中嵌套对象而不是所有歌曲-> songId 让它成为歌曲 ---> UID ----> songId ---> SongDetails 是否有意义。如果是这样,我将如何将其插入数据库而不创建对象只是为了保存歌曲 ID 并向该对象添加歌曲对象?
  • 最好只存储带有 songId 的歌曲。将uid节点添加到歌曲可能会导致歌曲重复。更好的结构是songs->songid->songObject。您可以通过 songRef.child(""songId").setValue(SongObject) 插入歌曲对象。
猜你喜欢
  • 2018-01-02
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 2020-01-20
  • 2018-04-07
  • 2017-10-19
相关资源
最近更新 更多