2011-01-21 42 views
9

目前我想開發移動設備的字典應用程序。字典本身使用脫機文件/數據庫來翻譯單詞。它只是翻譯兩種語言,例如英語 - 西班牙語字典。 我在腦海裏有一個簡單的設計。它將是兩張表:英文表和西班牙表。 爲每個表包含:字典應用程序的數據庫設計

  • word_id =這對於其他表
  • 字的外鍵的ID =字
  • word_description
  • correspond_trans_id =其他表的ID,其是將這個單詞翻譯成其他語言。

也因爲這是針對移動應用程序,數據庫使用SQLite。

每個表的定義數據已經按照表'word'的順序提供。但是,如果有數據定義的補充,我仍然在考慮問題。因爲該表將按字段'字'排序,是否有任何方法可以按字順序放入(插入)新記錄?或任何想法,使其更有效?

回答

14

至少每個翻譯都有一些翻譯可能性取決於上下文。如果你喜歡做的雙向字典兩種語言,你至少需要三個表:都包含所有在該語言已知和雙向映射由第三映射完成的話

ENGLISH 
ID | WORD 
1 | 'dictionary' 

GERMAN 
ID | WORD 
1 | 'lexikon' 
2 | 'wörterbuch' 

TRANSLATION_EN_DE 
ID_EN | ID_DE 
1  | 1 
1  | 2 

前兩個表表。這是一個常見的n:n映射案例。 有兩個表格,你總是可以添加一個新的語言,你是dicitionary。如果你使用一張表進行操作,那麼對於一個單詞將有多個定義,因此沒有標準化數據庫。

您還可以將您的語言表合併到單個表中,以另一列(引用語言表)定義單詞語言。在這種情況下,你需要一個2列的索引語言和單詞本身。

+0

前兩個表格可以與其他「語言」列組合使用。 – 2018-02-02 07:23:35

0

我同意馬特 - 爲了讓生活更輕鬆我會堅持一張桌子。另外,如果您計劃使用CoreData,則在Obj中工作時,傳統數據庫設計的索引建模與基於對象圖的模型不同。 C/IOS。

沿着Select查詢和內部/外部連接的傳統線路思考非常容易,但例如,通常在爲兩個表定義數據模型時設置'relationship'來處理列'correspond_trans_id'(if你當然使用CoreData)。

本質上,除非有一個很好的理由有兩張桌子,否則我會堅持一個。

與排序有關,您可能不需要保留數據集中單詞的順序。我猜你想要保持一切按字母順序排列,如果數據不斷變化,即使只有一張表,也會涉及一些工作。

再次使用CoreData,NSFetchRequest和NSSortDescriptor,可以非常容易地返回由指定列排序的一組記錄,使您不必擔心數據庫的修改和添加。

如果您有任何問題,請給我留言。

3

當語言1中的單詞可以被語言2中的多個單詞翻譯時,您打算做什麼?我認爲你必須使用類似wursT的設計來處理這個問題。

RE按字母順序插入記錄:您通常不擔心數據庫中記錄的物理排序。您可以使用ORDER BY子句以任何所需的順序檢索它們,並使用索引來提高效率。 SQL標準中沒有任何東西可以控制物理排序。嗯,我記得遇到了一些關於強迫我使用某個數據庫的物理順序的東西,我認爲這是MySQL,但大多數不會給你任何控制權。我沒有使用SQLite,所以我不能說它是否提供了一種方法。

1

當然,單詞與其可能的翻譯之間的關係是一對多或多對多的。我不清楚你將如何在你的模型中表現這一點。好像你可能需要至少一張桌子。

相關問題