私はバイリンガル辞書のアプリケーションを作成しました。現在のところ非常に簡単ですが、より完全な開発を開始する予定で、そのための最良のデータベース構造を見つけようとしています。前回の辞書プロジェクトではXMLを使っていましたが(辞書のエントリは主に階層的です)、データベースを使用してそれを行う必要があります。階層構造のデータベース設計の改善?
これは典型的な、中複雑エントリは(簡略化ビット)ように見えるであろうものである:
DAR
/DAR/
- 名詞
- 住宅、住居、住居
ar-rājldkhul ad-dār「男は家に入った」 - home
rjaƷnalid-dār「私たちは帰ってきました」
- 住宅、住居、住居
- 、
DURのリチウムヤミンをオンにする動詞- "右折。"
- あなたが見ることができるようにおよそ
、一つの単語が音声の複数の部分を持つことができますので、「品詞」は、単にエントリの属性することはできません/好転します、それは感覚に関連していなければなりません。それぞれのポジションには複数の感覚(番号が付いています)がありますが、もちろんそれぞれの意味には複数の同義語の翻訳があります。感覚には例文(おそらく複数)があるかもしれませんが、必ずしもそうではありません。言い換えれば
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)
-...
または、::エントリー部品が互いにどのように関係するかを考えて、私は5つのテーブルを使用して、次の構造を思い付いた
_ 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。シンプルで現行のフォームでは、1つのフィールドにカンマ区切りの変換だけがある2つのテーブル(Entry、Sense)しかありません。どちらが悪いですか。
2つの理由から、1)Python/Djangoで書かれたWebアプリケーションなので、2)xmlが嫌いです。
いいえ、それは動作しません。エントリの各部分は独自の属性を持つためです。 (おそらく、私が上に挙げた例のエントリはいくらか簡略化されていると指定していたはずです)たとえば、感覚には数字が必要で、その中には前置詞が必要なものもあります。各翻訳ワードは、それに関連する属性(すなわち、「日付付き」、「冒涜」)を有することもできる。もちろん、私はスピーチや翻訳などで簡単に検索する必要があります。私がしようとしていることは、この種の構造にとってはあまりにも複雑すぎるということです。 – larapsodia
これがあまりにも制限されている場合は、完全なデータベース設計が必要です。あなたは簡単で軽量なsqliteを使うことができます。サンプルデザイン:http://www.java2s.com/Code/Android/Database/SearchableDictionary.htm – CentAu
例をお寄せいただきありがとうございますが、残念ながらyo no hablo java。 :-) 私は既にデータベースを持っています(私はPostgresを使用しています)が、この構造が論理的/効率的であるかどうかは不思議です。 – larapsodia