2016-12-03 9 views
0

私はFirebaseの周りを頭の中に入れようとしているので、私は自分のリレーショナルデータを正しく索引付けしていることを確認したいと思います。私はユーザーとアドレスの間に双方向の関係があり、どちらも1対1です。アイデアは、ユーザーノードが最初に電子メールだけで作成され、アドレスを追加するときにaddressIDのキーがユーザーノードに追加されると同時に、userIDのキーがアドレスノードに追加されるというものです。これは、Firebsaeの文書(下部)の「構造データ」セクションでの推奨方法と似ています。しかし、ユーザノード内のアドレスを識別し、アドレスノード内のユーザを識別するために、私は、自動生成されたキー(userAutoID:true、addressAutoID:true;ではなくuserAutoID、user:自動生成されたIDをキーとして使用すると、そのキーが何を表しているかがわかりません)。あなたはアドレスは、ユーザーのIDを所有し、ユーザーがアドレスIDを所有している見ることができるようにFirebase Swiftでのリレーショナルデータの正確なインデックス作成

enter image description here

次のようにJSONの構造は、(両方のノードが最上位ノードの子である)です。私がこれを達成するために使っていたコードは長引いているように感じられ、私はこれを間違った方法で行うことができます。このコードは、ユーザーが住所用のフォームに記入して送信ボタンを押すとトリガーされます。したがって、ユーザーノードはアドレスノードの前に存在します。私はforループを使用して、存在する各アドレスのキーを順番に取得します。次に、別のクエリーにフィードし、現在のユーザーのIDがuserIDキーの値として現在のアドレスノードに存在するかどうかを調べます。これが当てはまる場合、現在のアドレスのIDを、現在のユーザー関連ノード内のaddressIDの値に設定します。

ユーザーとアドレスのノードが非常に大きくなると、1つのコードから2つのクエリを実行すると高価になることがあります。どんなフィードバックでも大歓迎です!

+0

1)イメージではなくテキストとしてFirebase構造を投稿してください。それは私たちが答えに再入力する必要性を軽減します。 2)あなたの質問はインデックス作成(つまりFirebaseインデックス)を指していますが、それはあなたが求めているものではありません。 3)アドレスノード*の前にユーザノードが存在するとの質問があるので、アドレスノードがまだ存在しない場合、ユーザのアドレスを検索するのはなぜですか?または、ユーザーがすでに住所を入力したかどうかを確認しようとしていますか?それはあなたが1-1のため、ユーザーノードにアドレス情報を格納しない理由はありますか?質問を明確にすることはできますか? – Jay

+0

こんにちはジェイ、混乱して申し訳ありませんが、私はコードを再配置し、次にFirebase構造にテキストを使用します。上記のコードはボタンの中にありました。ボタンを押すとアドレスオブジェクトが設定され、直後に同じボタン内から上のコードが実行されました。あなたのアドバイスを読んだ後、私はユーザノードの下にアドレスを保存しました。 FirebaseがiOSドキュメントのより良い仕事をしてくれて、もっと多くの事例と実践を提供して欲しいと本当に思います。かなり新しいプログラミングの人として、私は彼らのドキュメントが悪いと言わなければならない。 –

+0

これは1-1であるため、アドレス情報をユーザーノード内に格納できることに注意してください。しかし、1から多くまたは多くのものを必要とするときは、元の構造が不可欠です。データの非正規化は一般的には良い考えです。元々のFirebaseのドキュメントは、現在のものよりもずっと優れていましたが、この時点ではかなり弱いと私は同意します。 – Jay

答えて

0

私は、自動生成されたユーザーキーをアドレスの下のキーとして再利用します。

- Users 
    - xyz (auto generated) 
    - email: [email protected] 

- Addresses 
    - xyz (use the previously created id here too) 
    - street 
    - author 
    - lat 
    - lon 
+0

こんにちは@patrickmcd、コメントありがとう、これは私がやったことです、私のJSONの画像が含まれています。 AddressesノードのuserIDはユーザーの自動生成されたキーで、UsersノードのaddressIDはアドレスの自動生成されたキーです。 –

+0

私が言っているのは、アドレスキーを自動生成しないということです。ユーザーを作成したときに生成されたのと同じキーを使用してください。 Usersの下のAddressesとaddressIDにあるuserIDを完全に削除します。別のコレクションの下で同じノードを共有するため、自動的にリンクされます。 – patrickmcd

+0

"別々のコレクションの下で同じノードを共有します"。これらはトップレベルのノードで、現在その上にある唯一のノードはルートノードです。各エントリ(ユーザとアドレスで構成されている)には、自動生成キーと、それに続く自動生成キーを含むユーザとアドレスノードが必要ですか? –

関連する問題