2017-01-18 14 views
0

現在、Firebaseによって提供されているバックエンドを持つIOSアプリケーションを開発中です。 NOSqlバックエンドで作業していたのは初めてのことで、データの構造を最適にする方法についての情報が必要でした。現在のところ、アプリはフィードに表示される各ユーザーに関連する詳細のみを持つユーザーベースのアプリになります。したがって、ノート領域にノートを投稿すると、ノート領域にのみアクセスできます。この情報は共有されません。私のデータが現在どのようにセットアップされているかは、「ノート」と呼ばれるエンドポイントと「ユーザー」と呼ばれるエンドポイントを持つことです。私はeveryones notesを "notes"に入れ、 "notes"の各ユーザの下に "notes"というメインの "notes"領域の参照を持つエントリを持つことを計画しました。これは実際のノートデータを「メモ」としている「ユーザー」の子を持つだけで意味がありますか?Firebaseの適切なデータ構造

notes > 
    noteId > 
     noteName 
     noteDetails 
    noteId > 
     noteName 
     noteDetails 
    noteId > 
     noteName 
     noteDetails 

user > 
    notes > 
     noteId 
     noteId 
     noteId (these would reference the note in notes) 
    name 
    dateAdded 

これはデータが現在どのように見えるかです。これが最善の方法でしょうか。私はmySqlのバックグラウンドを持っており、noSqlを完全に理解するのに困っています。

答えて

3

単一のトップレベルノードにすべてのユーザーのメモを保存することは、ユーザー間のメモにアクセスする必要がある場合には意味があります。しかし、非常にに注意してください。すべての注釈を照会してください。アプリが本当にうまくいくとボトルネックになる可能性が高いからです。

あなただけのこれまで特定のユーザーのためのノートにアクセスする必要がある場合は、あなたにも個別ユーザごとにノートを分割可能性があります

notes > 
    user1 > 
    noteId > 
     noteName 
     noteDetails 
    noteId > 
     noteName 
     noteDetails 
    user2 > 
    noteId > 
     noteName 
     noteDetails 

このデータ構造は、の費用で、データのより良い分離につながります長い音符のリストを持たない。

それはさておき、あなたが平坦化すべきデータ営巣している:、ユーザープロファイルとユーザー・ノート別々のトップレベルのノードで次のようになります。これにより

users > 
    userId > 
     name 
     dateAdded 
userNotes > 
    userId > 
     noteId 
     noteId 
     noteId (these would reference the note in notes) 

を、あなたは、ユーザー名のリストを取得することができますすべてのノートIDを取得する必要はありません。次に、特定のユーザーのメモを表示する必要がある場合は、/userNotes/<uid>のメモキーにアクセスし、各ノードを読み込みます。

NoSQLデータモデリングを初めてお使いの場合は、NoSQL data modelingをお読みください。リレーショナル/ SQLのバックグラウンドから来た場合は、Firebase for SQL developersを表示することをお勧めします。

+0

驚くばかりです。それはまったく理にかなっています。私は何年ものPHPとリレーショナルデータベースの後に、フラット化されたデータアプローチに苦労してきました。本当にありがとう。 – user1881482

+1

あなたはそれだけではありません。 :-)それは主に、(SQLと絶えず比較することなく)いくつかの "未学習"と論理的思考が必要です。私は読書/閲覧のためのいくつかのリンクを追加しました。 –

関連する問題