1

(これは私の実際のプロジェクトの非常に最小化されたバージョンであり、相互にリンクされたより多くのテーブルと、各テーブルのより多くのデータと列があります)。

  • 異なる言語のコンテンツをサポートするコンテンツ管理システムの構造をどのように設定することをお勧めしますか? 次の方法は良いオプションですか?

私の現在のプロジェクトでは、記事を含むデータベースがあります。これらの記事は、列idtitle、およびtextによって定義されます。title 列と text 列は、列text_idのテーブルLanguageDataへの外部キーです。そのテーブルには、プロジェクト全体のすべての文字列が保持されます。このテーブルは、列idtext_idtext、およびlanguage_idで構成されています。

例:

Article : { id : 1, title : 1, text : 2 }

LanguageData : { id : 1, text_id : 1, text : "Title in english", language_id : 1 }
LanguageData : { id : 2, text_id : 1, text : "Tittel på svenska", language_id : 2 }
LanguageData : { id : 3, text_id : 2, text : "Text in english", language_id : 1 }
LanguageData : { id : 4, text_id : 2, text : "Texto en español", language_id : 3 }
  • 指定した言語の記事を返す高速な Web サービスを作成するにはどうすればよいですか?

私のプロジェクトには、language_id を入力として受け取り、正しい言語文字列が追加されたすべての記事を返す Web サービスもあります。このために、エンティティ フレームワークを使用してデータベースに接続し、データベース内の各記事と、LanguageData への外部キーである各列に対して、メソッドを呼び出します。

GetLanguageString(text_id, language_id)
   return LanguageData.First(ld => ld.text_id == text_id && ld.language_id == language_id)
  • LanguageData にリンクされた多数の列を含む 600 の記事を調べたい場合、これは非常に遅いようです。これを行うより良い方法はありますか?ここで言及されていない一部の列は、記事ごとに繰り返されることがよくあります (たとえば、列のカテゴリ)。同じテキストと同じ言語の文字列を既に検索している場合に再度実行する必要がないように、ラムダの質問の結果を保存する必要がありますか? ラムダ式または LINQ を使用する場合、問題はありますか? それらは同じように速いですか?

このトピックに関するいくつかのドキュメントは、喜んで受け取ります。私はバックエンドプログラミングが初めてで、ネット上でこれに関する情報を見つけることができないようです.

どうもありがとう。

4

1 に答える 1

1

私はこのようにすることにしました:

各記事にはarticleTextがあるので、言語固有ではないすべての情報をarticleテーブルに入れ、残りをarticleTextテーブルに入れます。すべての行は異なる記事または言語用です。次に、ニューステーブルなどの他のテーブルもあり、これらにもテキストテーブルが接続されています。

このソリューションでは、N列のN左結合と比較して、特定の言語で特定の記事のすべてのテキストを取得するために1つの左結合を実行するだけで済みます。また、すべてのテキストが1つのテーブルに含まれる前は、ホームページのテキストも含まれていました。これで、すべてに独自の小さなテーブルが作成され、ホームページのテキストは、データベースに対してルックアップを実行する代わりに、辞書に読み込んだローカルファイルに含まれる可能性があります。

もっとうまくできることがあれば教えてください。

これが誰かを助けることを願っています。

于 2012-12-13T08:59:33.277 に答える