2011-12-24 5 views
0

私はマルチランウェブサイトに取り組んでいます。この目的のために最適なdbスキーマを設計しようとしています。 langsmenu:ご覧のとおりMySQL駆動の多言語ウェブサイトのテーブルのスキーマ

enter image description here

は、2つのテーブルがあります。 私の考えは次の通りです:

ex。 MySQLテーブルから多言語ナビゲーション生成を見てみましょう。データベースからのナビゲーションを生成しながらPHPのバックエンドでは、

  • menuテーブルの行
  • 左第二テーブルジョインからのすべてのデータ取得 - langsmenuテーブルのフィールドnameによって) およびEXため(定義された言語の列からデータを取得します。en、ru)

あなたはどのように最適な方法であると思いますか、より効率的なソリューションがありますか?私にデータベース関連の答えを教えてください。ファイルではありません。

答えて

1

langsテーブルにlanguageカラムが含まれ、各変換に1つのローが含まれていると、より良い結果が得られます(例:gettext、...など)。これにより、後で別の言語を追加することができ、データの変更を適用するだけで済みます(クエリを書き直す必要はありません)。

左結合を実行してmenusテーブルに直接保持されているデフォルト言語にフォールバックすることもお勧めします(その場合は、例えばenのように翻訳を保持する必要はありません)。 langsテーブルでは、英語版が常に利用可能になるため)。 English翻訳、language-countrylanguage

また(翻訳が異なることができ、複数のスペイン語圏の国があり、たとえば、場合)国固有の翻訳を保存を検討したい、と発見の代替戦略を、次のことがあります。

+0

そういう意味ですか? http://prntscr.com/4u7je –

+0

@TuralTeyyuboglu - はい、メニュー '1'のすべての翻訳がIDを持っているように 'langs'テーブル' ID、言語 'の主キーを作成します「1」の –

+0

2番目の解決策のように、私は外部キーを使うべきですか?うまくいくの? –

1

あなたはそうのようにさらに正規化することができます。

  • TOKENNAME:ID、トークン(例えば、(1、プログラム)、(2、メニュー))
  • ローカライズ:ID、 tokenname_id、LANG、テキスト

文字列を参照するテーブルは、tokenname.idの文字列を外部キーとして参照します。

テキストローカライズのために、ある種のミニテンプレート言語が必要であることに注意してください。

+0

"文字列を参照するテーブルは、tokenname.idによる文字列を外部キーとして参照します。"私はこの部分をよく理解していません。してください、ここで説明するか、チャットルームであなたを待っています。 http://チャット。/multilang-website.com/6113/multilang-website –

関連する問題