Firebaseをバックエンドストレージメカニズム(JSON)として利用する簡単なJavaScript Twitterクローンに取り組んでいます。リレーショナルデータベース(SQL)に精通していますが、非リレーショナルデータベースには精通していません。外部キーの関係やテーブルの結合がないため、Firebaseでデータセットの構造を設計する方法を現在模索しています。
アプリには、users
、tweets
、およびfollowers
の3つのテーブルがあります。ユーザーはツイートを投稿したり、他のユーザーをフォローしたり、自分のツイートのフィードを表示したりできます。必要なテーブルをどのように結合するかわからないので、データ構造を作成しようとすると問題が発生します。たとえば、ユーザーフォロワー機能を実装するにはどうすればよいですか?
ここに私が自分自身に出発点を与えるために使用しているERDがあります:
私はこのJSON全体に頭を回そうとしているので、これはリレーショナルデータベースに関連付けることができる最も近いものですが、Firebaseの.Push()
関数を使用して、リストのリストに追加します。データベース(Firebaseダッシュボードに表示):
Firebaseにはクエリメカニズムがないため、そのデータを「非正規化」することでこれを解決しようとする人がいます。ただし、これらの記事はすべて、主に2014年より前のものです。つまり、Firebasedidがクエリを追加するときです。そうは言っても、クエリを使用することがどのように役立つかは理解できず、生成されたキーで行き詰まっていると思います。
Firebase JSONリストを使用するには、データをどのように最適化すればよいですか?いくつかのドキュメントを読みましたが、探しているものと生成されたキーを使用するものを見つけることができませんでした。
何らかの方法で.set()
メソッドを使用して、生成されたキーの代わりに電子メールアドレスをユーザーの「主キー」として使用する必要がありますか? [以下で説明するように、これは回避するつもりです。ありがとう@metame]
これは私がデータ構造のために見ているべき以上のものですか?そして、キーでクエリしますか?
users: {
Hj83Kd83: {
username: "test",
password: "2K44Djl3",
email: "[email protected]"
},
J3kk0dK4: {
username: "another",
password: "33kj4l5K",
email: "[email protected]"
}
}
tweets: {
Jkk3ld92: {
userkey: "Hj83Kd83",
message: "Test message here!"
},
K3Ljdi94: {
userkey: "J3kk0dK4",
message: "Another message here!"
}
}
followers: {
Lk3jdke9: {
userkey: "Hj83Kd83",
followerkey: "J3kk0dK4"
}
}
他に何か含める必要があるかどうか教えてください!
非リレーショナルデータベースまたはnoSQLデータベースでの関係の表現は、一般に、ドキュメントの埋め込み(行のnoSQL表現)またはサンプルソリューションで行ったようにドキュメント参照を通じて解決されます。
MongoDBサイトには、 モデル参照とドキュメント参照の1対多の関係 を含むすべての非リレーショナルデータベースにほとんど適用できる適切な記事がいくつかあります。
参照キーに関しては、一意であることが保証されているため、生成されたIDを使用することが通常はベストプラクティスです。