2010-03-19 44 views
0

我在SQLite中創建一個字典數據庫,需要一些提示。我的SQL有點生疏;)你會考慮這個好的SQL嗎?它使用Java JDBC完成。爲字典創建表?

這是爲了創建表格。

而且填充數據時,我給每個字號碼(ID)和字詞翻譯爲得到相同數量word_id。翻譯特定單詞的最佳方式是什麼?

回答

1

word_id INTEGER REFERENCES word(id)實際上並沒有在MySQL上創建外鍵。即使你使用InnoDB,它也需要明確的FOREIGN KEY聲明。

此外,我可能會使用自動編號爲兩個表的ID,再加上標記,然後作爲主鍵。

所以,同時服用這些考慮在內,加上大約多種翻譯需要一個多一對多的關係mpacona注:

CREATE TABLE word (
word_id UNSIGNED INTEGER AUTOINCREMENT PRIMARY KEY, 
entry TEXT, 
pos VARCHAR(50) 
); 

CREATE TABLE translation (
translation_id UNSIGNED INTEGER AUTOINCREMENT PRIMARY KEY, 
word_id UNSIGNED INTEGER, 
lang VARCHAR(5), 
entry TEXT 
); 

CREATE TABLE word_translation (
word_id UNSIGNED INTEGER, 
translation_id UNSIGNED INTEGER, 
PRIMARY KEY (word_id, translation_id), 
INDEX (word_id), 
INDEX (translation_id), 
FOREIGN KEY fk_word_id (word_id) REFERENCES word(id), 
FOREIGN KEY fk_translation_id (translation_id) REFERENCES translation(id) 
); 

編輯:我不知道是什麼POS機,所以我有限的IT到50個字符。如果您需要超過32k個字符,您可能還需要將TEXT調整爲其中一個較大的變體。

將lang更新爲5個字符以支持en-us樣式語法。

+0

Pos是言論的一部分。感謝提示!我將不得不閱讀關鍵和索引。 – heffaklump

1

我有一個第三個表單詞和翻譯

CREATE TABLE word_translation (
word_id INTEGER, 
translation_id INTEGER 
); 

不是在轉換表之間的關係,根本就translation_id和條目。

通過這種方式,您可以通過在表主鍵上設置ID來爲您的翻譯和單詞編制索引。

這也有助於你的查詢,你就可以有許多翻譯很多的話,只有一個入口點

1

如果你不是有一個「詞的概念」標識和語言領域,那麼你可以使其成爲多國語言的工作:

CREATE TABLE word (
    id INTEGER, 
    entry STRING, 
    language String, 
    word_concept_id INTEGER, 
    pos STRING 
); 

那麼你翻譯查詢

SELECT wr.entry FROM word wl, word wr 
WHERE wl.entry='DOOR' AND 
    wl.language='EN' AND 
    wl.word_concept_id=wr.concept_id AND 
    wr.language='CZ' 

你只需要計算出從第一個方案e word_concept_id字段(可能只是爲了在首選語言中添加術語時使用遞增值進行播種)。