6

私は 3 つの言語でウェブサイトを持っています。

DB を構築する最良の方法はどれですか?

1) 言語ごとに 1 つずつ (Product_en、Product_es、Product_de など) 3 つのテーブルを作成し、識別子を使用してテーブルからデータを取得します。

たとえば、phpページには次の文字列があります。

$language = 'en'

だから私はデータだけを取得します

SELECT FROM Product_$language

2) 以下を使用して 1 つのテーブルを作成します。

ID  LANGUAGE   NAME    DESCR

ページのみに投稿する

WHERE LANGUAGE = '$language'

3) 以下を使用して 1 つのテーブルを作成します。

ID  NAME_EN   DESCR_EN   NAME_ES   DESCR_ES   NAME_DE   DESCR_DE

ありがとうございました!

4

3 に答える 3

4

私はむしろ2 番目のオプションを選びます。

私にとって最初のオプションは、レコードの検索には十分な柔軟性がないようです。2 つの言語を検索する必要がある場合はどうすればよいでしょうか。あなたができる最善の方法は、2つのステートメントUNIONの結果です。SELECT3 つ目は、データの冗長性があるようです。すべての名前に言語を付ける必要があるように感じます。

2 つ目は非常に柔軟で便利です。レコードをピボットしたい場合を除き、特別なメソッドを追加しなくても、必要な操作を実行できます。

于 2013-04-16T23:56:13.017 に答える
1

私はオプション1または2を選択します。どちらが実際にアプリケーションに依存し、データへのアクセス方法に依存します。過去に同様のローカリゼーションを行ったときは、単一​​テーブル アプローチを使用しました。

このアプローチに対する私の好みは、追加のローカリゼーションを追加しても、DB スキーマをまったく変更する必要がないということです。この場合も、言語識別子はクエリで使用される別の値になるだけなので、関連するコードを変更する必要はありません。

于 2013-04-16T23:52:28.793 に答える
1

そうすれば、すぐにデータベースを強制終了できます。

次のようなテーブルを作成するだけです。

TABLE languages with fields:

-- product name
-- product description
-- two-letter language code

これにより、構造化されたデータベースが改善されるだけでなく、翻訳が 1 つしかない製品を作成することもできます。必要に応じて、他に指定されていない場合にデフォルトの言語を表示することもできます。もちろん、プログラムで行うことになりますが、アイデアは理解できると思います。

于 2013-04-16T23:52:59.200 に答える