数据库语言组织,按字或按语言?

时间:2013-05-25 22:36:52

标签: mongodb

我试图为句子添加一个字典(大多数是单个单词),但如果我应该按照单词组织它们,我还是未定,例如:

{word:"bacon", en:"bacon", ro:"sunca", fr:"jambon"}

或按语言:

{
    en:{ bacon:bacon },
    ro:{ bacon:sunca },
    fr:{ bacon:jambon }
}

我意识到两者都有利有弊,同样有效,但我正在寻求那些遇到过这个问题的人的智慧,做出选择,并且很高兴或后悔做到了,当然,为什么。< / p>

谢谢。

2 个答案:

答案 0 :(得分:2)

以下表示简单而优雅。但mongodb(或大多数nosql数据库)中的文档表示受到数据使用模式的严重影响。

{word:"bacon", en:"bacon", ro:"sunca", fr:"jambon"}

此表示具有以下优点,假设您想要通过传递word

来查找其他语言翻译
  1. Intitive
  2. 没有重复
  3. 您可以在word
  4. 上找到索引

答案 1 :(得分:0)

在您提供的两个选项中,第一个选项更好。但是,由于最多会有这么多语言,在你的情况下,我实际上会选择数组:

LANG = {en: 0, ro: 1, fr: 2}
DICT = [
  [:ham, :sunca, :jambon],
  [:egg, :ou, :œuf]
]

如需翻译,请写下:

def translate( word, from: nil, to: nil )
  from = LANG[from]
  to = LANG[to]
  i = DICT.index { |entry| entry[from] == word }
  return DICT[i][to]
end

translate( :egg, from: :en, to: :fr )
#=> :œuf

请注意,尽管已经尽力减少字典的大小,但就速度而言,可以使用例如更快的匹配算法。后缀树。