2013-06-04 48 views
3

我有來自exp的單詞和短語的數據庫。英語對其他15種語言,並在該列表中的其他15每一種語言對於一個對他們那種,現在在一個表像這樣(EN - >德):如何爲翻譯字典設計數據庫?

  • id_pair
  • 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 

這是規範化數據庫的最佳方式?但是,對於短語而言,如果有人輸入「dictionay」這個詞,那麼這個詞也會返回「This dictionary is good」和翻譯。 (我知道這可以在第一個表中找到與SQL查詢,是最好的辦法嗎?)

也需要它按字母順序所有的時間,我會有很多新的每日進入,所以我可以打印一些單詞之前和之後的單詞/分階段尋找翻譯的人。

我卡住了,不能決定什麼是最佳的方法來優化它。這些數據庫擁有15GB以上的基於文本的翻譯,每日需求量約爲10萬,因此每個MS值得。 :) 任何幫助將不勝感激,thx!

回答

5

對於每種語言都有單獨的表格,您需要大量的聯結表來涵蓋所有可能的翻譯組合。最重要的是,加入了新的語言將需要增加更多的表,重寫查詢,客戶端代碼等

這是更好地做一個更廣義的方式,與此類似:

enter image description here

關於TRANSLATION表,我建議也創建一個CHECK (WORD_ID1 < WORD_ID2)並創建一個索引{WORD_ID2,WORD_ID1}(與PK相反的「方向」),並且僅用一行表示翻譯的兩個方向。

考慮clustering TRANSLATION表,如果你的DBMS支持。

還用得着按字母順序所有的時間

查詢...

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

...可以使用索引的UNIQUE約束{LANGUAGE_ID,WORD_TEXT}下方。

+0

感謝您的幫助Branko,我認爲每種語言都有單獨的表格,我將爲搜索翻譯節省時間和服務器性能。當所有的單詞都在一個表中時,現在是否會有問題,並且對於在一個語言中搜索特定單詞將會很大?我必須要問,因爲我每天都有很多需求,而且越來越多。 –

+0

@IvanZg假設所有表都在同一個物理磁盤上,那麼在「多表」場景中不搜索正確的表也會產生成本,最終結果(性能方面)應該非常相似。如果您打算將表放在不同的磁盤上,可以通過分區(假設您的DBMS支持它)而不是分割爲單獨的表來實現類似的效果。 –

+0

如果我想給句子如何使用單詞,那麼用exp的階段內的單詞怎麼樣?我仍然使用%WORD%來選擇它嗎? –