我有一个复杂的字典数据库方案。每个对象(本质上是一个翻译)都与此类似:
Entry {
keyword;
examples;
tags;
Translations;
}
和
Translation {
text;
tags;
examples;
}
和
Example {
text;
translation;
phonetic_script;
}
即标签(即语法)可以属于关键字本身,也可以属于翻译(外语的语法),类似的例子可以属于翻译本身(即解释外语)或条目中的文本。我最终得到了这种关系设计:
entries(id,keyword,)
tags(tag)
examples(id,text,...)
entrytags(entry_id,tag)
entryexamples(entry_id,example_id)
translations(id,belongs_to_entry,...)
translationtags(transl_id, tag)
translationexamples(transl_id,example_id)
我的主要任务是查询这个数据库。假设我搜索“foo”,我目前的处理方式是:
query all entries with foo, get ids A
foreach id in A
query all examples belonging to id
query all tags belonging to id
query all translations belonging to A, store their ids in B
foreach tr_id in B
query all tags belonging to tr_id
query all examples belonging to tr_id
重建我的对象。这对我来说看起来很麻烦,而且很慢。我看不出如何通过使用连接或其他方式显着改善这一点。我很难将这些对象建模为数据库中的关系。这是一个合适的设计吗?
我怎样才能更有效地提高查询时间?