2016-08-17 102 views
2

我创建了一个双语词典应用程序,它目前非常简单,但我们将开始更全面地开发条目,并试图找出最好的数据库结构。我曾经使用过的以前的字典项目都使用了xml(因为字典条目大部分是分层的),但我需要使用数据库来完成。更好的分层结构数据库设计?

这是一个典型的,中等复杂的条目将是什么样子(简化了一下):


DAR
/DAR/

  • 名词
    1. 房屋,住宅,居所
      ar-rājldkhul ad-dār,“这个人进了房子。”
    2. 首页
      rjaƷnalid-dār,“我们回到了家。”
  • 动词

    1. DUR立亚明, “右转”。
    2. 转身/约

正如你所看到的,一个字可以有多重词类的,所以“讲话的一部分,”不能简单地将条目的属性,它必须与感官有关。每个pos可以有多个感官(编号),当然每个感觉可以有多个接近同义的翻译。感官也可能有例句(可能不止一个),但并非总是如此。的进入部分是如何相互关联的思考,我想出了下面的结构,采用五个表:

Entry 
-id 
-headword 
-pronunciation 
-... 

PartOfSpeech 
-id 
-entry (ForeignKey) 
-pos 

Sense 
-id 
-sense_number 
-part_of_speech (ForeignKey) 
-... 

Translation 
-id 
-tr 
-sense (ForeignKey) 
-... 

Example 
-id 
-ex 
-ex_tr 
-sense (ForeignKey) 
-... 

或者,换句话说:

        _ Translation 
Entry -- PartOfSpeech -- Sense --| 
            - Example 

这看起来简单而有意义的我,但我想知道它在执行过程中是否会过于复杂。例如,要显示条目选择,我需要编写几个嵌套的for循环(for e in entries → for p in pos → for s in senses → for tr in translations) - 并且全部使用反向查找!

而我不认为我甚至可以在Django管理员中编辑整个条目(除非它允许您以某种方式执行内联内联)。无论如何,我要建立一个编辑器界面,但是如果能够在管理网站上进行检查,那么很好。

有没有更好的方法来做到这一点?我觉得我必须有一些聪明的东西,我错过了。

感谢, 卡伦


如果你很好奇: tunisiandictionary.org。在目前的简单形式中,它只有两个表格(Entry,Sense),翻译只是逗号分隔在一个字段中。哪个不好。
由于两个原因:1)因为它是我用Python/Django编写的Web应用程序,2)因为我讨厌xml。

回答

-1

为什么不使用python dictionary数据结构(或json/bson)以及mongodb

在Python中,它比xml方便得多。

例如,您可以简单地有一个python词典对象列表来表示整个词典。每个元件可被一个结构如下:

[{ 
    "_id": "1", 
    "word": "étudier", 
    'definitions': { 
     [(
      "v", 
      "to study", 
      "j'étudie français", 
      "I study french" 
     ), ... 
     ] 
    } 
}, ...] 

其中定义为元组的列表(第一元件是语音的一部分,第二个元素是定义,第三元件是在所述第一语言的示例,所述元件是那个例子的翻译)。

然后你可以很容易地在mongodb数据库中索引它。

这是一个非常简单的结构,你不需要用外键处理过于复杂的数据库。使用mongodb,检索单词的定义就如同

record = db.collection.find({'word':'étudier')

+0

不,这不起作用,因为条目的每个部分都会有自己的属性。 (也许我应该明确指出,我上面给出的示例条目有些简化。)例如,感官需要有数字,并且其中一些可能需要介词。每个翻译单词也可以具有与其关联的属性(即,“过时”,“亵渎”)。当然,我需要通过词类,翻译等来轻松搜索。总的来说,我要做的事对于这种结构来说太复杂了。 – larapsodia

+0

如果这个太有限了,你应该有一个完整的数据库设计。你可以使用简单轻量的sqlite。一个示例设计:http://www.java2s.com/Code/Android/Database/SearchableDictionary.htm – CentAu

+0

感谢您的示例,但不幸的是没有hablo java。 :-) 我已经有一个数据库(我使用的是Postgres),但我只是想知道这个结构是否合乎逻辑/高效。 – larapsodia

1

您也可以在sql数据库中模拟保存字典。有人已经写这真棒帮手:

Django Dictionary Model

我用它在我的项目也是如此。