Firebase - 构建数据库的正确方法

Posted

技术标签:

【中文标题】Firebase - 构建数据库的正确方法【英文标题】:Firebase - proper way to structure the DB 【发布时间】:2016-06-14 09:14:33 【问题描述】:

我有一个类似于音乐社交网络的 ios 应用。 在应用程序中,用户分享有关特定音乐“曲目”的“帖子”。 考虑到每个“post”对象都引用一个“track”对象,我想知道在 Firebase 中构建数据库的最佳方法。

另外,当用户提交新帖子时,我需要通过查询艺术家+歌曲标题来检查曲目是否已存在 - 如果曲目不存在,则添加新曲目。如果轨道存在,则获取“track_id”以在“post”对象中引用。

【问题讨论】:

【参考方案1】:

在这种情况下,您在实现跟踪搜索功能和搜索跟踪跟踪的用户时会遇到一些麻烦。 因此,通常,您需要在客户端应用程序中完全加载至少一个表。 我希望这可以为您以后的麻烦提供帮助。请查看 Github 上的 Salada 框架。您可以使用关系。

【讨论】:

【参考方案2】:

这里的挑战是在 Firebase 中执行一个不存在的“和”查询。因此,您将两条数据混合在一起,然后进行查询。这是一个结构

artists
   artist_0: Pink Floyd
   artist_1: Billy Thorpe
   artist_2: Led Zeppelin

tracks
   track_id_0: Stairway To Heaven
   track_id_1: Children Of The Sun
   track_id_2: Comfortably Numb

artists_tracks
   artist_0_track_id_2: true
   artist_1_track_id_1: true
   artist_2_track_id_0: true

posts
   post_id_0
      artist_track: artist_1_track_id_1
      post: Billy was one of the most creative musicians of modern times.
   post_id_1
      artist_track: artist_0_track_id_2
      post: The Floyd is the best band evah.

使用这种结构,如果您知道艺术家和曲目名称,您可以将它们连接起来,并在artist_tracks 节点中对.equalToValue(true) 进行简单查询以查看它是否存在。

帖子节点中的帖子与这些特定的艺术家和曲目相关联。

在某些情况下,您可以将数据粘合在一起以执行和搜索,而无需额外的节点......就像这样

stuff
  artist_track: Billy_Thorpe_Children_Of_The_Sun

但是,由于名称中的空格和文本的不同宽度,它不起作用。这样可以确保您在数据中包含足够多的数字来处理许多歌曲和艺术家,从而使长度保持一致。

artists_tracks
   artist_00000_track_id_00002: true

现在您可以拥有 50,000 位艺术家和 50,000 首曲目。

【讨论】:

感谢您的详细解答! (和kickass轨道;))

以上是关于Firebase - 构建数据库的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

如何以正确的方式在 Firebase 查询中加入结果

将 Firebase 身份验证与 Firestore 一起使用的正确方法是啥?

这是从 Firebase 检索数据的正确方法吗?

将firebase与redux-sagas连接的正确方法是啥?

从firebase中删除项目的正确方法

连接firebase和redux-sagas的正确方法是什么?