我创建了一个双语词典应用程序,它目前非常简单,但我们将开始更全面地开发条目,并试图找出最好的数据库结构。我曾经使用过的以前的字典项目都使用了xml(因为字典条目大部分是分层的),但我需要使用数据库来完成。更好的分层结构数据库设计?
这是一个典型的,中等复杂的条目将是什么样子(简化了一下):
DAR
/DAR/
- 名词
- 房屋,住宅,居所
ar-rājldkhul ad-dār,“这个人进了房子。” - 首页
rjaƷnalid-dār,“我们回到了家。”
- 房屋,住宅,居所
- 动词
- 把
DUR立亚明, “右转”。 - 转身/约
- 把
正如你所看到的,一个字可以有多重词类的,所以“讲话的一部分,”不能简单地将条目的属性,它必须与感官有关。每个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。
不,这不起作用,因为条目的每个部分都会有自己的属性。 (也许我应该明确指出,我上面给出的示例条目有些简化。)例如,感官需要有数字,并且其中一些可能需要介词。每个翻译单词也可以具有与其关联的属性(即,“过时”,“亵渎”)。当然,我需要通过词类,翻译等来轻松搜索。总的来说,我要做的事对于这种结构来说太复杂了。 – larapsodia
如果这个太有限了,你应该有一个完整的数据库设计。你可以使用简单轻量的sqlite。一个示例设计:http://www.java2s.com/Code/Android/Database/SearchableDictionary.htm – CentAu
感谢您的示例,但不幸的是没有hablo java。 :-) 我已经有一个数据库(我使用的是Postgres),但我只是想知道这个结构是否合乎逻辑/高效。 – larapsodia