如何为翻译词典设计数据库?

时间:2013-06-04 09:25:29

标签: database database-design

我有来自exp的单词和短语的数据库。英语到15种其他语言,以及该列表中的每种语言到其他语言15.对于一对,他们现在在这样的一个表中排序(en - > de):

  • 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”,我还需要“这本字典很好”并为此翻译。 (我知道这可以在第一个表中找到sql查询,这是最好的方法吗?)

同时也需要按字母顺序排列,我每天都会有很多新的参赛作品,所以我可以在有人寻找翻译的单词/阶段之前和之后打印几个单词。

我陷入困境,无法确定优化它的最佳方法。这些数据库总共有超过15GB的基于文本的翻译,每天需要大约10万,所以每ms都值得。 :) 任何帮助都会很感激,谢谢!

1 个答案:

答案 0 :(得分:5)

对于每种语言使用单独的表,您需要大量的联结表来涵盖所有可能的转换组合。最重要的是,添加新语言需要添加更多表,重写查询,客户端代码等。

最好以更通用的方式进行,类似于:

enter image description here

关于TRANSLATION表,我建议还创建一个CHECK (WORD_ID1 < WORD_ID2)并创建一个索引{WORD_ID2,WORD_ID1}(与PK相反的“方向”),并且只用一个表示翻译的两个方向行。

如果您的DBMS支持,请考虑clustering TRANSLATION表。

  

还需要按字母顺序排列

查询...

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

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