簡體   English   中英

為字典創建表?

[英]Create tables for a dictionary?

我正在SQLite中創建字典數據庫,需要一些提示。 我的SQL有點生銹;)您會認為這是個不錯的SQL嗎? 它是通過Java JDBC完成的。

這是用於創建表的。

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

CREATE TABLE translation (
word_id INTEGER REFERENCES word(id), 
entry STRING
);

並且當填充數據時,我給每個單詞一個數字(id),並且單詞翻譯獲得的數字與word_id相同。 提取特定單詞的翻譯的最佳方法是什么?

我還有第三張桌子來說明單詞和翻譯之間的關系

CREATE TABLE word_translation (
word_id INTEGER, 
translation_id INTEGER
);

比在轉換表上,只需包含translation_id和entry。

這樣,您可以通過將表上的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'

您只需要從word_concept_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是什么,所以我將其限制為50個字符。 如果您需要超過32k個字符,則可能還需要將TEXT調整為其較大的變體之一。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM