(我提出这个问题的原因是基于阅读this answer,这让我重新考虑了我目前的设置)
我目前正在开发一个ruby on rails应用程序,其中有许多语言,每个语言都附有一个基本单词的字典,以及映射到每个基本单词的单词列表。我目前设置它的方式,有一个base_words
表,其中包含base_word
字符串,以及language_id
作为外键。还有一个words
表,每行包含一个word
字符串,以及base_word_id
作为外键。每列还有一个language_id
索引,但由于base_word上的language_id,我几乎肯定这是多余的,所以我打算把它取下来(虽然这可能是一个我不好的假设。)
总之,与我在开头提到的答案相反,表格没有用语言分隔,因为我已经推断出我可以在时机成熟时以编程方式简单地提取语言。但是,我的应用程序也会有与每个基本单词相关联的翻译(正如我引用的答案一样),因此我怀疑我的结构是因为每个翻译实际上都是同一个base_word表格本身,这意味着翻译实际上只是所述表格中另一个基本单词的id。这可能完全没问题,或者可能不是 - 我不知道(这是我的第一个编程项目)。
这可以吗?我是否需要将我的base_words分成每种语言的单独表格,还是可以将其全部保存在一个表格中?
另一个例子:我还需要为每种语言存储许多短语及其翻译。我应该有一个表,其中每一行都有相应的短语翻译,或者一个表中每行只包含一个短语和一个language_id,或多个表(每种语言一个)?
Un saludo, 迈克尔
答案 0 :(得分:2)
与其他情况一样,您将拥有translations
表。没有技术原因它可能没有base_words
的多个外键(也许是source_word_id
和target_word_id
。所以,是的,您绝对可以将所有单词存储在一个表中。翻译作为方向关系涉及一些小的副作用:翻译只能以一种方式工作,并且会有许多具有相反来源和目标的条目。这些都不是一件令人担心的事情:第一种甚至可能是为了在一种语言中表示具有双重含义的词而不是另一种语言,而第二种,空间便宜且索引很容易。
您是正确的,不需要words.language_id
,只要您在查询base_words
并且语言很重要时始终加入words
。如果你有一个使用base_words
离开是有意义的用例,这显然会发生变化,但根据你所描述的情况,这种情况听起来不太可能。
至于短语:为什么要处理它们与base_words不同?