2016-08-17 108 views
2

我創建了一個雙語詞典應用程序,它目前非常簡單,但我們將開始更全面地開發條目,並試圖找出最好的數據庫結構。我曾經使用過的以前的字典項目都使用了xml(因爲字典條目大部分是分層的),但我需要使用數據庫來完成。更好的分層結構數據庫設計?

這是一個典型的,中等複雜的條目將是什麼樣子(簡化了一下):


DAR
/DAR/

  • 名詞
    1. 房屋,住宅,居所
      ar-rājldkhul ad-dār,「這個人進了房子。」
    2. 首頁
      rjaƷnalid-dār,「我們回到了家。」
  • 動詞

    1. DUR立亞明, 「右轉」。
    2. 轉身/約

正如你所看到的,一個字可以有多重詞類的,所以「講話的一部分,」不能簡單地將條目的屬性,它必須與感官有關。每個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管理員中編輯整個條目(除非它允許您以某種方式執行內聯內聯)。無論如何,我要建立一個編輯器界面,但是如果能夠在管理網站上進行檢查,那麼很好。

有沒有更好的方法來做到這一點?我覺得我必須有一些聰明的東西,我錯過了。

感謝, 卡倫


如果你很好奇: tunisiandictionary.org。在目前的簡單形式中,它只有兩個表格(Entry,Sense),翻譯只是逗號分隔在一個字段中。哪個不好。
由於兩個原因:1)因爲它是我用Python/Django編寫的Web應用程序,2)因爲我討厭xml。

回答

-1

爲什麼不使用python dictionary數據結構(或json/bson)以及mongodb

在Python中,它比xml方便得多。

例如,您可以簡單地有一個python詞典對象列表來表示整個詞典。每個元件可被一個結構如下:

[{ 
    "_id": "1", 
    "word": "étudier", 
    'definitions': { 
     [(
      "v", 
      "to study", 
      "j'étudie français", 
      "I study french" 
     ), ... 
     ] 
    } 
}, ...] 

其中定義爲元組的列表(第一元件是語音的一部分,第二個元素是定義,第三元件是在所述第一語言的示例,所述元件是那個例子的翻譯)。

然後你可以很容易地在mongodb數據庫中索引它。

這是一個非常簡單的結構,你不需要用外鍵處理過於複雜的數據庫。使用mongodb,檢索單詞的定義就如同

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

+0

不,這不起作用,因爲條目的每個部分都會有自己的屬性。 (也許我應該明確指出,我上面給出的示例條目有些簡化。)例如,感官需要有數字,並且其中一些可能需要介詞。每個翻譯單詞也可以具有與其關聯的屬性(即,「過時」,「褻瀆」)。當然,我需要通過詞類,翻譯等來輕鬆搜索。總的來說,我要做的事對於這種結構來說太複雜了。 – larapsodia

+0

如果這個太有限了,你應該有一個完整的數據庫設計。你可以使用簡單輕量的sqlite。一個示例設計:http://www.java2s.com/Code/Android/Database/SearchableDictionary.htm – CentAu

+0

感謝您的示例,但不幸的是沒有hablo java。 :-) 我已經有一個數據庫(我使用的是Postgres),但我只是想知道這個結構是否合乎邏輯/高效。 – larapsodia

1

您也可以在sql數據庫中模擬保存字典。有人已經寫這真棒幫手:

Django Dictionary Model

我用它在我的項目也是如此。