そうですね、Node.js を使って自分のウェブサイトのブログを書き始めようとしています (学習プロセスと同じくらい)。
あちこち検索すると、「Mongo でブログを書く方法」ガイドがいくつか作成されましたが、私が直面しているような問題はカバーされていないようです。ここに私のジレンマがあります:
MySQLを使用する場合、スキーマは次のようなものであると想像できます。
投稿:
ID, USER, DATE, TITLE, TAGS
コメント:
POST_ID, USER, DATE, MESSAGE
ユーザー:
ID, SCREEN_NAME, IMAGE_URL
したがって、各投稿にはコメントが関連付けられており、投稿とコメントにはユーザーが関連付けられています。利点は、ユーザーが自分のスクリーン名または画像を変更したい場合、users テーブルの 1 行だけを更新する必要があることです。ただし、おそらく複数の潜在的なタグに対して複数のフィールドがない限り、Xタグを含むすべての投稿を取得する方法はわかりません。
または、 MongoDBのようなものを使用して、次のようにフォーマットすることを検討していました。
投稿コレクション:
{
{
_ID: something
USER: {id: id, name: "screen name", image: "image_url"}
DATE: ...
TITLE: ...
TAGS: [tag1, tag2...]
COMMENTS:
[
{USER:someone, DATE:something, MESSAGE:"hi"},
{USER:someone, DATE:something, MESSAGE:"another message"}
]
},
{
_ID: something,
USER: {id: id, name: "screen name", image: "image_url"},
DATE: ...
TITLE: ...
TAGS: [tag1, tag2...]
COMMENTS:
[
...
]
},
}
そのため、各投稿にコメントが埋め込まれているのは当然のことです。
ここでは、1 つのクエリで、一致するすべての投稿を取得できます。これはすばらしいことです。一方で、ユーザーが使用するスクリーン名や画像を更新する必要がある場合はどうすればよいでしょうか? すべての投稿で関連するすべてのレコードを更新することは言うまでもなく、特定のドキュメント内の埋め込みオブジェクトを掘り下げるのは難しいようです。
コメントを別のコレクションに移動してアクセスしやすくすることもできますが、それでも、スクリーン ネームなどに関する多くの更新を行う必要があります。
そう...
本質的に、私は MongoDB を使用することを好みます。MongoDB でできること、非常に簡単にできること、および 1 つの言語で全面的に作業できることは素晴らしいことです。しかし、物事を「適切に」行うには、リレーショナルなアプローチを採用する必要があると感じずにはいられません。
どちらか、または両方の言語で似たようなことをした経験のある人はいますか?
これについてどう思いますか?具体的には、ユーザーとコメント/投稿との関係をどのように処理していますか?
事前に助けてくれてありがとう:)ジェームズ