0

すぐに、多言語コンテンツをサポートするカタログ (php+mysql) に取り組む予定です。そして今、データベース構造を設計する最善の方法を検討しています。現時点では、multilang を処理するための 3 つの方法があります。

1)言語固有のデータごとに個別のテーブルを用意します。つまり、概略的には次のようになります。

  • 1 つのテーブルMain_Content_Itemsがあり、ID、creation_date、ヒット数、投票などの翻訳できない基本データを格納します。これは 1 つだけで、すべての言語を参照します。

そして、ここに各言語用に複製されるテーブルがあります:

  • Common_Data_LANG テーブル (例: common_data_en_us) (翻訳可能な共通/「静的」フィールドを保存しますが、eny カタログ アイテムに存在します: title、desc など...)
  • Extra_Fields_Data_LANG テーブル(翻訳できる追加フィールド データを保存しますが、カスタム アイテム グループでは異なる可能性があります。つまり、次のようになります: | id | item_id | field_type | value | ...) 次に、アイテム リクエストで、user/ に従ってテーブルを調べます。デフォルトの言語を設定し、翻訳可能なデータをmain_contentテーブルと結合します。

長所:

  • 最も頻繁に更新される「メイン」データ (つまり、ヒット数、投票数など) を 1 つのクエリだけで更新できます。
  • 「lang」フィールドを持つ1つのテーブルのみを使用する構造と比較して、4つ以上の言語がある場合、データを4倍以上複製する必要はありません。したがって、MySql クエリは、400000 以上ではなく、100000 (たとえば) レコード カタログを通過するのにかかる時間が短くなります。

短所:

  • 言語ごとに+2テーブル

2) コンテンツ テーブルで「lang」フィールドを使用する:

  • Main_Content_Items テーブル(ID、作成日、ヒット数、投票数など、変換できない基本データを格納します...)
  • Common_Data テーブル(翻訳可能な共通/「静的」フィールドを保存しますが、eny カタログ アイテムに存在します: | id | item_id | lang | title | desc | など...)
  • Extra_Fields_Data テーブル(翻訳可能であるが、カスタム項目グループごとに異なる可能性がある追加フィールド データを保存します。つまり、| id | item_id | lang | field_type | value | ...) したがって、common_data と extra_fields を main_content_items に結合します。 「lang」フィールドに。

長所:

  • 最も頻繁に更新される「メイン」データ (つまり、ヒット数、投票数など) を 1 つのクエリだけで更新できます。
  • コンテンツデータ用のテーブルは 3 つだけです

短所:

  • すべての言語のデータで満たされた custom_data および extra_fields テーブルがあるため、X 倍大きくなり、クエリの実行が遅くなります

3) 2 番目の方法と同じですが、「lang」フィールドを持つ Common_Data とマージされた Main_Content_Items テーブルを使用します。

長所:

  • ...?

短所:

  • すべての言語で最も頻繁に更新される更新「メイン」データ (つまり、ヒット数、投票など) を更新する必要があります。
  • すべての言語のデータで満たされた custom_data および extra_fields テーブルがあるため、X 倍大きくなり、クエリの実行が遅くなります

「何が良いのか」「なぜ」についての提案を喜んで聞きますか? それとももっと良い方法がありますか?

前もって感謝します...

4

1 に答える 1

0

私はこの質問で同様の答えを出し、この手法の利点を強調しました(たとえば、アプリケーションに言語を決定させ、句のlangパラメーターを変更するだけでそれに応じてクエリを作成させることが重要ですWHERESQL クエリ。

これは、2番目のソリューションにかなり近いものです。「extra_fields」はよくわかりませんでしたが、それが理にかなっていれば、(!) common_data テーブルにマージできます。テーブルが多すぎてそこにある項目を簡単に見失う可能性があるため、最初のアイデアには反対することをお勧めします。

あなたの編集へ:私はまだ2番目のアプローチの方が良いと考えています(それは私のオプションなので相対的です;))私は最適化の専門家ではありませんが、適切なインデックスと適切なテーブル構造の速度は問題ではないと思います. いつものように、最も効果的な方法を見つける最良の方法は、両方の方法を実行して、データ、構造などによって速度が異なるため、どちらが最適かを確認することです。

于 2010-07-12T12:00:02.573 に答える