2012-11-29 63 views
1

我有一個數據庫表中的單詞和他們的描述(有點像字典)。這些單詞可以具有同義詞,我希望能夠搜索單詞和同義詞,從而給出「主」單詞。什麼是最好的數據庫結構來實現這一點,並使搜索儘可能簡單高效?良好的SQLite數據庫結構來存儲和搜索同義詞

例如:一個單詞可能是'樹'和可能的同義詞'植物'和'植被'。當「植物」搜索結果應該是這樣的:

(植物,植被):Blablabla


假設我也想在文字說明搜索將這改變你的答案?

該域(萬一它很重要)是一個Sqlite數據庫的Android應用程序。

P.S.我看到了諸如Good database and structure to store synonyms這樣的問題,但這個更具體些。

+0

聽起來像可能是1對n – Madbreaks

回答

1

喜歡的東西:

create table descriptions 
(
    description_id integer not null primary key, 
    content varchar 
); 

create table words 
(
    word varchar not null primary key, 
    description_id integer not null, 
    foreign key (description_id) references descriptions (description_id) 
); 

(不是100有關語法%,我真的不知道SQLite的,但上面是ANSI SQL)

words表中每一行與同description_id是其他人的同義詞。

您可能希望在存儲這些單詞之前對它們進行「規範化」(全部小寫,單數等)。

+0

這種設計的缺陷是,沒有辦法確定哪個單詞是同義詞組的「主要」規範單詞,但它可以通過添加一個布爾值來解決表字。另一件事是(如你在我的例子中看到的那樣)顯示結果時,我想用單詞與他們的同義詞進行分組。我錯誤地認爲用這種設計實現這一點效率會很低? –

+2

@OmarKohl:你沒有說你需要一個「主」字。但如果這是必需的,我也會添加一個布爾標誌。我並不瞭解SQLite,但通過PostgreSQL和其他DBMS,可以使用兩個表之間的連接並使用string_agg()在單個SQL中獲取以逗號分隔的單詞列表來檢索單詞。另一種解決方案是簡單地發送兩個查詢。一個用於描述,另一個用於描述。 –

相關問題