質問: 多言語データを保持するのに最適なデータベース構造は何ですか? 可能性のある複製: 多言語データベースのスキーマ 以下に例を示します。[ products ] id (int) name-en_us (varchar) name-es_es (varchar) name-pt_br (varchar) description-en_us (varchar) description-es_es (varchar) description-pt_br (varchar) price (decimal) 問題:すべての新しい言語はテーブル構造を変更する必要があります。別の例を次に示します。[ products-en_us ] id (int) name (varchar) description (varchar) price (decimal) [ products-es_es ] id (int) name (varchar) description (varchar) price (decimal) 問題:すべての新しい言語では新しいテーブルを作成する必要があり、「価格」フィールドはすべてのテーブルで複製されます。別の例を次に示します。[ languages ] id (int) name (varchar) [ products ] id (int) price (decimal) [ translation ] id (int, pk) model (varchar) // product field (varchar) // name language_id (int, fk) text (varchar) 問題:ハード?
回答: 方法3と同様:[languages] id (int pk) code (varchar) [products] id (int pk) neutral_fields (mixed) [products_t] id (int fk) language (int fk) translated_fields (mixed) primary key: id,language そのため、各テーブルに対して、翻訳済みフィールドを保持する別のテーブル(私の場合は接尾辞「_t」)を作成します。 select * from products、単に... left join products_t on products_t.id = products.id and products_t.language = current_language。それほど難しくはなく、頭痛から解放されます。