我已经创建了一个双语词典应用 1 ,目前它非常简单,但我们将开始更全面地开发条目,并且我正在努力找出最好的它的数据库结构。我曾经使用的以前的字典项目使用了xml(因为字典条目主要是分层的),但我需要使用数据库。 2
这是典型的,中等复杂度的条目(简化一点):
<小时/> DAR
正如您所看到的,一个单词可以有多个词性,因此“词性”不能简单地成为Entry的属性,它必须与感官相关。每个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管理员中编辑整个条目(除非它允许您以某种方式执行内联内联的内联)。无论如何,我打算建立一个编辑器界面,但是能够在你想要的时候检查管理站点上的内容是很好的。
有更好的方法吗?我觉得我必须有一些聪明的东西。
谢谢, 卡伦
<小时/> 1 如果你很好奇:tunisiandictionary.org。在其简单的当前形式中,它只有两个表(Entry,Sense),翻译只用逗号描述在一个字段中。哪个不好。
答案 0 :(得分:1)
答案 1 :(得分:-1)
为什么不使用python dictionary数据结构(或json / bson)和mongodb?
在python中,它比xml
更方便。
例如,您可以只使用一个python dict对象列表来表示整个字典。每个元素的结构可以如下:
[{
"_id": "1",
"word": "étudier",
'definitions': {
[(
"v",
"to study",
"j'étudie français",
"I study french"
), ...
]
}
}, ...]
其中定义是元组列表(第一个元素是词性,第二个元素是定义,第三个元素是第一语言的例子,第四个元素是该例子的翻译)。
然后,您可以轻松地在mongodb数据库中对其进行索引。
这是一个非常简单的结构,您不需要使用外键处理过于复杂的数据库。使用mongodb,检索单词的定义就像
一样简单 record = db.collection.find({'word':'étudier')
。