我已经创建了一个双语词典应用程序1,它目前非常简单,但我们将开始更全面地开发词条,我正试图找出最好的数据库结构。我以前参与过的字典项目都使用了xml(因为字典条目很大程度上是分层的),但是我需要使用数据库来完成
这是一个典型的中等复杂度条目的外观(简化了一点):dar
/dār/名词
住宅、住宅、住所
“那人进了房子。”
主页
“我们回家了。”
动词
转身
李亚民,“右转。”
转身
正如你所见,一个词可以有多个词性,所以“词性”不能简单地作为词条的属性,它必须与词义相关。每个词组可以有多个词义(编号),当然每个词义可以有多个近义词翻译。感官也可能有例句(可能不止一个),但并不总是这样。考虑到条目部分是如何相互关联的,我想出了以下结构,使用了五个表: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)
-...
或者,换句话说:
^{pr2}$
这看起来很简单,对我来说很有意义,但我想知道在执行过程中是否会太复杂。例如,要显示一组条目,我需要编写几个嵌套的for循环(for e in entries → for p in pos → for s in senses → for tr in translations),而且都是反向查找!在
我甚至不认为我可以在Django管理中编辑整个条目(除非它允许您以某种方式对内联的内联进行内联)。不管怎样,我都要构建一个编辑器界面,但是当你想的时候,能够在管理站点上检查东西是很好的。在
有更好的方法吗?我觉得我错过了一些聪明的东西。在
谢谢,
凯伦
1如果你好奇的话:tunisiandictionary.org。在其简单的当前形式中,它只有两个表(Entry,Sense),翻译只是用逗号在一个字段中描述。这很糟糕。
2有两个原因:1)因为它是我用Python/Django编写的web应用程序;2)因为我讨厌xml。