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

Firebase - proper way to structure the DB

我有一个 iOS 应用程序,它就像一个音乐社交网络。 在该应用中,用户分享 "posts" 特定音乐 "tracks"。 考虑到每个 "post" 对象引用单个 "track" 对象,我想知道在 Firebase 中构造数据库的最佳方法。

此外,当用户提交新的 post 时,我需要通过查询艺术家 + 歌曲名称来检查曲目是否已存在 - 如果曲目不存在,请添加新曲目。如果轨道存在,则获取 "track_id" 以在 "post" 对象中引用。

这里的挑战是在 Firebase 中执行 'and' 查询,这不存在。因此,您将两份数据混合在一起,然后执行该查询。这是一个结构

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.

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

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

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

stuff
  artist_track: Billy_Thorpe_Children_Of_The_Sun

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

artists_tracks
   artist_00000_track_id_00002: true

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

在这种情况下,您在实现曲目搜索功能和搜索关注曲目的用户时会遇到一些麻烦。 所以一般来说,您需要在您的客户端应用程序中完全加载至少一个 table。 希望对你以后的烦恼有所帮助。请检查 Github 上的 Salada 框架。您可以使用关系。