web同义词应用程序的正确数据库设计



我即将为同义词web应用程序设计数据库。如果有人正在键入一个单词,例如"important",你应该得到一些同义词,如"essential"或"necessary"。由于同义词web应用程序通常有数千行,我想设计我的数据库以尽快获得信息。对于我的应用程序,我发现了同义词数据库的两种可能设计。

必要,重要
id 单词 同义词
1 重要

您可以使用规范化的设计。

在这里,每个colun都被索引,因此可以提供快速的结果

你也可以在单词列表中实现全文搜索

进一步的增强是不使用1,2和2,1,但为此查询会更加复杂,您可以同时插入它们

CREATE TABLE Word_list (id BIGINT AUTO_INCREMENT PRIMARY KEY,   word varchar(50),
CONSTRAINT constraint_word UNIQUE (word))
INSERT INTO Word_list(word) VALUES('important'),('necessary'),('essential')
CREATE TABLE synonym(id1 BiginT, id2 Bigint,
FOREIGN KEY (id1)
REFERENCES Word_list(id),
FOREIGN KEY (id2)
REFERENCES Word_list(id)
, PRIMARY KEY(id1,id2))
INSERT INTO synonym VALUES(1,2),(1,3)
SELECT syn.word FROM synonym s JOIN Word_list syn ON s.id2 = syn.id
WHERE id1 = (SELECT id FROM Word_list WHERE word = 'important')
word
基本
必要

如果该数据集的唯一用途是将从一个单词映射到多个其他单词,那么您的第一选择是可以的。但要注意,如果你需要走另一条路,那就是一团糟。

认为id是浪费和不必要的,并且会减慢速度(在这种情况下(。所以…2列:

word VARCHAR(100) NOT NULL,
synonyms TEXT NOT NULL,
PRIMARY KEY(word)

最新更新