我創建了一個雙語詞典應用程序,它目前非常簡單,但我們將開始更全面地開發條目,並試圖找出最好的數據庫結構。我曾經使用過的以前的字典項目都使用了xml(因爲字典條目大部分是分層的),但我需要使用數據庫來完成。更好的分層結構數據庫設計?
這是一個典型的,中等複雜的條目將是什麼樣子(簡化了一下):
DAR
/DAR/
- 名詞
- 房屋,住宅,居所
ar-rājldkhul ad-dār,「這個人進了房子。」 - 首頁
rjaƷnalid-dār,「我們回到了家。」
- 房屋,住宅,居所
- 動詞
- 把
DUR立亞明, 「右轉」。 - 轉身/約
- 把
正如你所看到的,一個字可以有多重詞類的,所以「講話的一部分,」不能簡單地將條目的屬性,它必須與感官有關。每個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。
不,這不起作用,因爲條目的每個部分都會有自己的屬性。 (也許我應該明確指出,我上面給出的示例條目有些簡化。)例如,感官需要有數字,並且其中一些可能需要介詞。每個翻譯單詞也可以具有與其關聯的屬性(即,「過時」,「褻瀆」)。當然,我需要通過詞類,翻譯等來輕鬆搜索。總的來說,我要做的事對於這種結構來說太複雜了。 – larapsodia
如果這個太有限了,你應該有一個完整的數據庫設計。你可以使用簡單輕量的sqlite。一個示例設計:http://www.java2s.com/Code/Android/Database/SearchableDictionary.htm – CentAu
感謝您的示例,但不幸的是沒有hablo java。 :-) 我已經有一個數據庫(我使用的是Postgres),但我只是想知道這個結構是否合乎邏輯/高效。 – larapsodia