ブログアプリを作成したいとします。私は次の2つのオプションのどちらかを選ぶべきですか?私はできるだけ多くの "真の単一の情報源"を持つことを望んでいますが、その好みが私のSQLの背景から来ているかどうかはまだ分かりません。Firebase(NoSQL):非正規化とインデックス作成
オプション1(非正規化):
Posts: {
post_1: {
title: "hello",
body: "hi there!",
uid: "user_1",
comments: {
comment_1: {
body: "hi I commented",
uid: "user_2",
},
comment_2: {
body: "bye I commented",
uid: "user_2",
},
}
}
}
Users: {
user_1: {
uid: "user_1",
post_1: {
title: "hello",
body: "hi there!",
uid: "user_1",
comments: {
comment_1: {
body: "hi I commented",
uid: "user_2",
},
comment_2: {
body: "bye I commented",
uid: "user_2",
},
}
}
}
}
オプション2(インデックス):
Posts: {
post_1: {
title: "hello",
body: "hi there!",
uid: "user_1",
authorName: "Richard",
comments: {
comment_1: true,
comment_2: true
}
}
}
Users: {
user_1: {
uid: "user_1",
displayName: "Richard",
email: "[email protected]",
posts: {
post_1: true
},
comments: {
comment_1: true,
comment_2: true
}
}
}
Comments: {
comment_1: {
body: "hi I commented",
uid: "user_1",
},
comment_2: {
body: "bye I commented",
uid: "user_1",
},
}
は、私はオプション2
私が見る主な問題好むべきだと思いますオプション1の場合、1つのデータのソースが多すぎます。それぞれの投稿が特定のカテゴリまたはタグに属するようにアプリを拡張したいとします。その後、私はオブジェクトをと/users/uid
に加えて/categories/category_id
の下に書く必要があります。投稿が更新されたら、post
オブジェクトを3つの異なる場所で変更することを忘れないでください。オプション2を使用すると、データのソースが1つしかないため、この問題は発生しません。
何か不足していますか?
参考文献:
2番目のオプションが好きなら、なぜNoSQLを使用するのですか? SQLと一緒に行ってください... – obe
私はバックエンドのためにfirebaseを試してみたいです。また、NoSQLでオプション1をオプション2よりも優先させるべきかどうかを知りたい。この(https://firebase.google.com/docs/database/web/structure-data)は、オプション2は優れていると述べていますが、多くの投稿でもオプション1を実行することが推奨されています。 –
免責事項は賢明ではありませんプライマリバックエンドとしてNoSQLを使用する実践的な経験私は昔ながらのかもしれませんが、私は可能な限りデータを正規化した方が好きです。かなりのパフォーマンスやシンプルさの利益を得るには、ルールを曲げて二重性を持たせても大丈夫ですが、複雑なリレーショナルデータの場合、リレーショナルデータベース(おそらくキャッシュ層としてNoSQLを使用する)が最適です。私はあなたの質問に答えていないことを認識していますが、それは答えの代わりにコメントを書いている理由です:) – obe