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

Iva*_* Zg 4 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
Run Code Online (Sandbox Code Playgroud)

这是规范化DB的最佳方法吗?但是,如果有人输入单词"dictionay",我还需要"这本字典很好"并为此翻译.(我知道这可以在第一个表中找到sql查询,这是最好的方法吗?)

同时也需要按字母顺序排列,我每天都会有很多新的条目,所以我可以在单词/阶段之前和之后打印几个单词.

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

Bra*_*vic 6

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

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

在此输入图像描述

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

如果您的DBMS支持,请考虑对TRANSLATION表进行集群.

也需要按字母顺序排列

查询......

SELECT * FROM WORD WHERE LANGUAGE_ID = :lid ORDER BY WORD_TEXT
Run Code Online (Sandbox Code Playgroud)

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