数据库-多语言在线词典

时间:2019-02-17 17:52:00

标签: database multilingual

我正在实现用于多语言在线词典的数据库。目前,我只有2种语言(RO-罗马尼亚语,CS-捷克语),但我认为也许将来我会希望添加更多语言(例如EN-英语)。

该网站也将是多语言的,因此罗马尼亚用户可以搜索捷克词,而捷克用户可以搜索罗马尼亚词。

我正在考虑如何为多个翻译实现TRANSLATIONS表。目前,我已经实现了该方法,但这还不是可行的方法,因为如果要再添加10种语言,则必须再添加10列:

WORD (id,word,language_id,..)
TRANSLATIONS(id,ro_id,cs_id)
LANGUAGE(id,code)

LANGUAGE
id   code
1     ro
2     cs

WORD

id word language_id
1  xxx      1
2  yyy      2

TRANSLATIONS
id   ro_id   cs_id
1      1       2

我可以制作一个像这样的表

TRANSLATIONS(id,word_id,translation_id)

但是在这种情况下,我不知道如何搜索翻译,我将不得不添加两种情况:

TRANSLATIONS
id   word_id   translation_id
1      1            2
2      2            1

有些想法?我希望我的描述有意义。

谢谢。

更新:另一种方法可能是带有JSON列的表,例如:

TRANSLATIONS(id,data)

id                            data
1          {"ro":1,"cs":2,"another_lang": "another_id"}

但这是个好主意吗?

1 个答案:

答案 0 :(得分:1)

我认为您的数据库设计可能会有些偏离。

也许您可以拥有类似的东西:

WORD (id,word,language_id,..)
TRANSLATIONS(id,language_id_from,language_id_to,word_id_from,word_id_to)
LANGUAGE(id,code)

那么您将获得以下记录:

    LANGUAGES
id  code
1   EN (english)
2   RO (romanian)

      WORDS
id    word   language_id
221   hi     1
4423  Bună   2


TRANSLATIONS

id      lang_id_from   lang_id_to   word_id_from   word_id_to
54512         1             2             221          4423

然后,对于给定语言中的给定单词(例如英语中的“ hi” ),您将查找与单词ID( 1 )并定位您要查找的语言ID,例如罗马尼亚语( 2 )。

类似的东西:

SELECT * 
FROM Translations 
WHERE word_id_from = 1 AND language_id_to = 2

它是可伸缩的,因为您可以根据需要添加新的语言,单词和翻译,并且搜索不会受到影响。