0

私は現在、言語リスト用のSQLテーブルを設定しています。これは、近い将来、Webアプリケーションの翻訳作業のフレームワークとして機能します。

私が作成することにしたテーブルとフィールドは次のようになります。

Language
--------
Language ID
Language name
Native name

Region
------
Language ID
Region

Active
------
Language ID
Active

言語IDは、両方のテーブルの主キーになります。

アクティブテーブルのアクティブフィールドを使用すると、翻訳された言語(1で示される)と翻訳されていない言語を簡単に知ることができます。

サンプルデータは次のようになります。

言語表

Language ID  Language name   Native name
-----------  -------------   -------------
afr          Afrikaans       Afrikaans
sqi          Albanian        gjuha shqipe
ara          Arabic          العربية

リージョンテーブル

Language ID  Region 
-----------  -------------   
afr          Africa       
sqi          Eastern Europe
ara          Middle East

アクティブなテーブル

Language ID  Active
-----------  -------------   
afr          0
sqi          1
ara          0

言語と地域の数は決まっている予定です。私がデータベースに追加する予定の言語(後で翻訳に使用するため)には、次のものが含まれます(すべてのコードは、http: //en.wikipedia.org/wiki/にあるISO 639-2/B列から取得されます。 List_of_ISO_639-1_codes):

Afrikaans
Albanian
Arabic
Belarusian
Bulgarian
Catalan
Chinese (simplified)
Chinese (traditional)
Croatian
Czech
Danish
Dutch
English
Estonian
Esperanto
Filipino
Finnish
French
Galician
German
Greek
Hebrew
Hindi
Hungarian
Icelandic
Indonesian
Irish
Italian
Japanese
Korean
Latvian
Lithuanian
Macedonian
Malay
Maltese
Norwegian
Persian
Polish
Portuguese
Romanian
Russian
Serbian
Slovak
Slovenian
Spanish
Swahili
Swedish
Thai
Turkish
Ukrainian
Vietnamese
Welsh
Yiddish

地域のカテゴリは次のとおりです。

All
Africa 
Middle East
Americas
Asia-Pacific
Eastern Europe
Western Europe

私の質問は、このテーブルを完全に正規化したかどうかです。それをさらに正規化することはできますか、それともより効率的にすることができますか。設定する前に、何か提案をいただければ幸いです。

4

1 に答える 1

2

複数のテーブルでPKとしてlanguageIDを使用している場合、適切に正規化されていません。

アクティブなテーブルは、言語がアクティブであるかどうかを示すためだけのものですか?そのようにアクティブな場合は、言語テーブルのフィールドである必要があります。

リージョンテーブルはregionID、regionである必要があります。

リージョンを、languageID列とregionID列のみを含む言語にリンクする別のテーブルを追加する必要があります。pkは、regionIDとlanguageIDの組み合わせキーである必要があります。これにより、言語から地域への多対多の関係をより適切に表すために拡張することができます。

リクエストによる(そして私が行ういくつかのマイナーな変更):

あなたの例では、なぜリンクテーブルが必要なのかは明らかではありませんが、「南北アメリカ」地域に到達するときに考えてみてください。各国は英語、スペイン語、フランス語、ポルトガル語を話す可能性があるため、実際には複数の言語が必要です。そして、あなたがそれを国に分解するときでさえ、カナダはフランス語と英語の両方を必要とするでしょう。また、スペイン語はヨーロッパと南北アメリカの複数の地域に存在する予定です。リンクテーブルはこれをよりよく表します。

言語IDはintである必要があります。ただし、3文字の省略形が一意であっても、ほとんどのSQLエンジンはintにすばやく参加できるため、言語テーブルは次のようになります。

Language ID  Language Code  Language name   Native name   Active
-----------  -------------  -------------   ------------  ------
1            afr            Afrikaans       Afrikaans     0
2            sqi            Albanian        gjuha shqipe  1
3            ara            Arabic          العربية
4            spa            Spanish         Espanol       1
5            eng            English         English       1

アラビア語の後にアクティブフィールドに0を入力することはできないようですが、波線がどのようなASCIIでもうまく機能しないので、そこにあると想像してみてください。

リージョンテーブルは次のようになります。

Region ID  Region 
---------- -------------   
1          Africa       
2          Eastern Europe
3          Middle East
4          Americas
5          Western Europe

ここで、リンクテーブルが必要です。これは基本的に次のようになります。

Region ID  Language ID
---------  -----------
1          1
2          2
3          3
4          4
4          5
5          4
5          5

したがって、これは、同じ地域で複数の言語が使用されている可能性があり、複数の場所で言語が使用されている可能性があることをよりよく表していることがわかります。

于 2012-08-01T17:55:05.657 に答える