5

exp の単語とフレーズを含むデータベースがあります。英語から 15 の他の言語へ、およびそのリスト内のすべての言語から他の 15 へ。

  • id_ペア
  • word_en
  • word_de

単語やフレーズの膨大なリストのデータベースを作成する最善の方法は何ですか? 私はすべての主要言語を他の言語から分離しなければならないことを知っており、おそらく次のように考えていました:

ENGLISH
ID | WORD
1  | 'dictionary'

GERMAN
ID | WORD
1  | 'lexikon'
2  | 'wörterbuch'

TRANSLATION_EN_DE
ID_EN | ID_DE
1     | 1
1     | 2

これは DB を正規化する最良の方法ですか? しかし、フレーズとは何か、誰かが「dictionay」という単語を入力すると、これが「この辞書は良い」とその翻訳も返す必要があります。(SQL クエリを使用して最初のテーブルでこれを見つけることができることはわかっていますが、それが最善の方法ですか?)

また、常にアルファベット順に必要です。毎日新しいエントリがたくさんあるので、翻訳を探している単語/フェーズの前後にいくつかの単語を印刷できます。

私は立ち往生していて、それを最適化する最良の方法は何かを判断できません。これらのデータベースには、テキスト ベースの翻訳だけで合計 15 GB 以上があり、1 日あたり約 100k の要求があるため、1 ミリ秒の価値があります。:)どんな助けでも感謝します、thx!

4

1 に答える 1

7

言語ごとに個別のテーブルを使用すると、考えられるすべての翻訳の組み合わせをカバーするために多数のジャンクション テーブルが必要になります。その上、新しい言語を追加するには、テーブルの追加、クエリの書き直し、クライアント コードなどが必要になります。

次のように、より一般化された方法で行うことをお勧めします。

ここに画像の説明を入力

TRANSLATION テーブルに関してはCHECK (WORD_ID1 < WORD_ID2)、インデックス {WORD_ID2, WORD_ID1} (PK とは反対の「方向」) も作成し、1 行だけで両方向の翻訳を表すことを提案します。

DBMS でサポートされている場合は、TRANSLATION テーブルのクラスタリングを検討してください。

また、常にアルファベット順に必要です

クエリ...

SELECT * FROM WORD WHERE LANGUAGE_ID = :lid ORDER BY WORD_TEXT

... UNIQUE 制約 {LANGUAGE_ID, WORD_TEXT} の下のインデックスを使用できます。

于 2013-06-04T13:57:51.027 に答える