【问题标题】:Database - Multilanguage online dictionary数据库 - 多语言在线词典
【发布时间】:2019-02-18 02:18:18
【问题描述】:

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

    我认为您的数据库设计可能有点偏差。

    也许你可以有类似的东西:

    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
    

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

    【讨论】:

    • 但如果我想将 Buna 翻译成 hi,我需要在表 TRANSLATIONS 中再添加一行:54513 2 1 4423 221。而且我认为我不需要lang_id_fromlang_id_to 列,因为我可以通过word_id_fromword_id_to 列访问该语言。
    • 您假设源语言和目标语言中的单词之间存在 1:1 的对应关系。您添加的语言越多,这种虚构就越难维护。例如,英语单词 driver 有 4 种荷兰语翻译,具体取决于他是驾驶汽车、电车、公共汽车还是火车。但只有 3 个法语。
    • 你是对的, lang_id_from 和 lang_id_to 不是必需的。但你必须长期做事。也许在性能方面,您更喜欢在翻译表中使用语言 ID。在面向 Web 应用程序的 NO-SQL 数据库(如 MongoDB)中,您更有可能这样做。
    • 对 BoarGules:我不认为我认为这是对应关系。 Translations 表可以实现多重关系。您可以为同一个词添加任意数量的翻译。在任何语言中,即使语言重复。如果我不清楚这一点,我很抱歉。在他的查询中,他将获得目标语言中单词的所有翻译。在您的示例中,他将通过搜索荷兰语翻译获得 4 条记录,并在法语中获得 3 条记录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    相关资源
    最近更新 更多