我想知道如何在数据库中保存同义词。例如:
我想到了一个有一列的桌子,我将有
college,academy,school,
然后我用
查询表格SELECT * FROM synonyms WHERE word LIKE 'school'
这个问题很好解决了吗?也许更好的方法是使用两个表?谢谢你的所有答案。
答案 0 :(得分:0)
我个人会使用一个表words
与多对多连接称为同义词。所以实际上它是两个表,words
id:integer, word:string
,第二个synonyms_words
:word_id:integer, synonym_id:integer
。然后你的SQL查询将是:
SELECT synonyms.word
FROM words
INNER JOIN synonyms_words
ON synonym_words.words_id = words.id
INNER JOIN words AS synonyms
ON synonyms_words.synonyms_id = synonyms.id
WHERE words.word = 'school'
答案 1 :(得分:0)
你的解决方案没问题但不好。是的,您可以将一组同义词视为一个实体并将其存储起来。 (你可以用分隔符开始和结束每个组,即',大学,学院,学校',以便能够询问'%,school,%'等词。但是查找单词总会导致完整表扫描,效率不高。
此外,为了显示'school'的同义词,你想要显示'大学,学院'而不是',大学,学院,学校'。也许有人想查找'academy'的其他同义词。因此,您突然处理单个单词而不是仅处理同义词组。因此,不再建议将单词存储为连接字符串。
你需要的是一张单词表。而且你需要同义词组。
您可以使用两个表执行此操作,一个包含单词,另一个用于同义词组:
Table words: id | word ---+---------------- 1 | college 2 | school 3 | academy 4 | group of fish Table groups: id | id_word ---+---------------- 1 | 1 1 | 2 1 | 3 2 | 2 2 | 4
或者用一张桌子来做:
Table groups: group_id | word ---------+----------------+ 1 | college 1 | school 1 | academy 2 | school 2 | group of fish
这两种方法都具有易于访问,维护,存储等方面的优势。