2011-01-19 10 views
0

この基本的な多言語設計の実装上の問題があります。多言語表の設計問題

content_id bigint(20) NOT NULL, 
lang_id int(5) NOT NULL, 
word varchar (500) NOT NULL, 
created datatime, 

表の内容は、今の問題は、これを実装することにあります。私はアプリケーションでは、私は1,2,3,4,5のようなcontent_idを持つページ上の各単語を宣言していると仮定... 1 = "こんにちは" 2 = "ようこそxxxxxは"など右ですか?だから問題は私がコードに "Hello" = 1を与えることです。だからテーブルの中には 1、23(英語)、こんにちは。

私はスペイン語のセッションがある場合、どのようにテーブルの中で "Hello"を見つけることができますか?なぜなら、システムは常にこれを検索して英語のテキストを見つけ出すように、コードで1を "Hello"にハードコーディングしたからです。私の周りの唯一の仕事は、言語ごとに別々のテーブルを持つことです?

答えて

1

lang_idとcontent_idを複合主キーにする必要があります。 (あなたが英語を話すので)あなたも、開発者として、あなたのためにそれを容易にするために、別のテーブルに英語の翻訳を抜け出すする場合があります

1   Hello   1 
1   Hola    2 
2   Thanks   1 
2   Gracias   2 
2   Danke   3 

..:あなたはこのようになりますデータになってしまいますあなたはWordId 1が正式に "こんにちは"であることを知っています。言語表への外部キー、明らかに。これを行うと、プライマリキーのサロゲートキーも必要になる可能性があります。これにより、更新が簡単になります。

+0

翻訳されたものではなく、言語IDとともに(言語IDと共に)IDを使用して(デフォルトではなく)数値を使用することをお勧めします。たとえば、ホームページに表示されるHelloには「homepage.greeting」というIDが付いています。 – Paul

+0

複合PKはデータベース用ですが、私はまだコード内でそれを参照する必要があり、私が知る限り、コード内でそれを行うことはできますか?あなたがHello =(1,1)を宣言できると言っていない限り、私はまだHello = 1を宣言しなければならないのですか?そして、このスキーマはこのユースケースのために働くのですか?「言語翻訳が見つからない場合は、その単語の英語にデフォルト設定されています。」 – JonnyK

+0

あなたが正式な名前を付けたいと思っています - 英語の価値を照会するのではなくあなたが望む言語の値を使用する場合は、開発者に優しい識別子を含むテーブルに参加することができます。 –

関連する問題