我在SQLite中創建一個字典數據庫,需要一些提示。我的SQL有點生疏;)你會考慮這個好的SQL嗎?它使用Java JDBC完成。爲字典創建表?
這是爲了創建表格。
而且填充數據時,我給每個字號碼(ID)和字詞翻譯爲得到相同數量word_id。翻譯特定單詞的最佳方式是什麼?
我在SQLite中創建一個字典數據庫,需要一些提示。我的SQL有點生疏;)你會考慮這個好的SQL嗎?它使用Java JDBC完成。爲字典創建表?
這是爲了創建表格。
而且填充數據時,我給每個字號碼(ID)和字詞翻譯爲得到相同數量word_id。翻譯特定單詞的最佳方式是什麼?
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
樣式語法。
我有一個第三個表單詞和翻譯
CREATE TABLE word_translation (
word_id INTEGER,
translation_id INTEGER
);
不是在轉換表之間的關係,根本就translation_id和條目。
通過這種方式,您可以通過在表主鍵上設置ID來爲您的翻譯和單詞編制索引。
這也有助於你的查詢,你就可以有許多翻譯很多的話,只有一個入口點
如果你不是有一個「詞的概念」標識和語言領域,那麼你可以使其成爲多國語言的工作:
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字段(可能只是爲了在首選語言中添加術語時使用遞增值進行播種)。
Pos是言論的一部分。感謝提示!我將不得不閱讀關鍵和索引。 – heffaklump