私のアプリでは、アンケートシステムを実装しています。質問のタグを実装したいと思います。質問のタグやスタックオーバーフローとよく似ています。
これをオブジェクトのプロパティとして実装する方法についてアドバイスを受けたかったのです。それらは文字列の配列である必要があります-以下のように?
{
"id": 123,
"question": "What is your favorite color?",
"tags": [
"personality trait",
"likes and dislikes"
]
}
それとも、実際の言い回しの代わりに、あるタイプの識別子を使用する方が良いでしょうか?
{
"id": 123,
"question": "What is your favorite color?",
"tags": [1234, 89645]
}
これらの質問をNoSQLデータベースに保存することを考えており、ユーザーがこれらのタグに基づいてクエリを実行できるようにしたいと考えています。たとえば、誰かが「性格特性」に関するすべての質問を引き出したい場合、その特定のタグを含むクエリを実行できるはずです。
これは、アプリケーションの観点から、タグをどのように処理するかによって異なります。それが単一のユーザー言語で検索するためだけのものであり、タグの正確さが重要でない場合は、文字列を探してください。しかし、他のすべてのケースでは、IDはIMHOのより良い候補になります。
オプション1(文字列)では、タグはドキュメントに埋め込まれた単純な文字列値(別名値オブジェクト)と見なします。これには次のような影響があります。
オプション2(id)では、タグは独立していると見なします エンティティ(DDDの意味で) MongoDBを使用しています- 埋め込みモデル の代わりに 正規化データモデル 。結果は次のとおりです。
個人的には、私が国際的な環境で働いているので、すぐにオプション2を選びます。問題は、オプション1から始めた場合、その後に進化するのが難しいことです。たとえば、スキルのタグ付けが最初に開始されたとき、LinkedInの誰かがdbモデルで文字列タグを使用したため、数年後、プロファイルを複数の言語で表示できますが、スキルタグは翻訳されていないため、英語でのみ使用できますまたは異なる言語を混合することによって。