2016-08-17 7 views
2

私はバイリンガル辞書のアプリケーションを作成しました。現在のところ非常に簡単ですが、より完全な開発を開始する予定で、そのための最良のデータベース構造を見つけようとしています。前回の辞書プロジェクトではXMLを使っていましたが(辞書のエントリは主に階層的です)、データベースを使用してそれを行う必要があります。階層構造のデータベース設計の改善?

これは典型的な、中複雑エントリは(簡略化ビット)ように見えるであろうものである:


DAR
/DAR/

  • 名詞
    1. 住宅、住居、住居
      ar-rājldkhul ad-dār「男は家に入った」
    2. home
      rjaƷnalid-dār「私たちは帰ってきました」

  • DURのリチウムヤミンをオンにする動詞
    1. "右折。"
    2. あなたが見ることができるようにおよそ

、一つの単語が音声の複数の部分を持つことができますので、「品詞」は、単にエントリの属性することはできません/好転します、それは感覚に関連していなければなりません。それぞれのポジションには複数の感覚(番号が付いています)がありますが、もちろんそれぞれの意味には複数の同義語の翻訳があります。感覚には例文(おそらく複数)があるかもしれませんが、必ずしもそうではありません。言い換えれば

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が嫌いです。

答えて

-1

mongodbと一緒にpython dictionaryデータ構造(またはjson/bson)を使用しないのはなぜですか?

Pythonでは、xmlよりずっと便利です。

たとえば、辞書全体を表すためのpython dictオブジェクトのリストを単純に作成できます。

[{ 
    "_id": "1", 
    "word": "étudier", 
    'definitions': { 
     [(
      "v", 
      "to study", 
      "j'étudie français", 
      "I study french" 
     ), ... 
     ] 
    } 
}, ...] 
定義はタプルのリスト(第1要素は、スピーチの一部である、第二の要素が定義され、第三の要素は、第一言語の一例であり、記載要素がある

を次のように各要素を構成することができますその例の翻訳)。

mongodbデータベース内に簡単にインデックスを作成できます。

これは非常に単純な構造であり、外部キーを使用して複雑すぎるデータベースに対処する必要はありません。 mongodbを使用すると、単語の定義を取得することは簡単です

record = db.collection.find({'word':'étudier')

+0

いいえ、それは動作しません。エントリの各部分は独自の属性を持つためです。 (おそらく、私が上に挙げた例のエントリはいくらか簡略化されていると指定していたはずです)たとえば、感覚には数字が必要で、その中には前置詞が必要なものもあります。各翻訳ワードは、それに関連する属性(すなわち、「日付付き」、「冒涜」)を有することもできる。もちろん、私はスピーチや翻訳などで簡単に検索する必要があります。私がしようとしていることは、この種の構造にとってはあまりにも複雑すぎるということです。 – larapsodia

+0

これがあまりにも制限されている場合は、完全なデータベース設計が必要です。あなたは簡単で軽量なsqliteを使うことができます。サンプルデザイン:http://www.java2s.com/Code/Android/Database/SearchableDictionary.htm – CentAu

+0

例をお寄せいただきありがとうございますが、残念ながらyo no hablo java。 :-) 私は既にデータベースを持っています(私はPostgresを使用しています)が、この構造が論理的/効率的であるかどうかは不思議です。 – larapsodia

1

SQLデータベースで保存辞書をエミュレートすることもできます。誰かがすでにこの素晴らしいヘルパーを書いた:

Django Dictionary Model

私も私のプロジェクトでそれを使用しています。

関連する問題