我正在实现用于多语言在线词典的数据库。目前,我只有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"}
但这是个好主意吗?
答案 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
它是可伸缩的,因为您可以根据需要添加新的语言,单词和翻译,并且搜索不会受到影响。