数据库 - 多语言在线词典

问题描述 投票:0回答:1

我正在为多语言在线词典实现一个数据库。目前我只有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"}

但这是一个好主意吗?

database multilingual
1个回答
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”,您将查找与单词(1)的id匹配的翻译记录,并定位您正在寻找的语言ID,例如罗马尼亚语(2)。

就像是:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.