我正在为多语言在线词典实现一个数据库。目前我只有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"}
但这是一个好主意吗?
我认为您的数据库设计可能有点偏差。
也许你可以有类似的东西:
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
它可以扩展,因为您可以根据需要添加新的语言,单词和翻译,并且您的搜索不会受到影响。