我想知道如何在数据库中保留同义词。例如:SQL如何保持同义词/替代词
- 道学校有同义词,如:大学,学院
- 如果我把在形式上“学校”的响应应该包含[大学,学院] 否则,如果我写的大学,我想[学校,学院]
我想到了一个表,一列在那里我将有
college,academy,school,
然后我查询表
SELECT * FROM synonyms WHERE word LIKE 'school'
难道这个问题很好的解决吗?也许更好的方法是使用两个表?感谢所有的答案。
我想知道如何在数据库中保留同义词。例如:SQL如何保持同义词/替代词
我想到了一个表,一列在那里我将有
college,academy,school,
然后我查询表
SELECT * FROM synonyms WHERE word LIKE 'school'
难道这个问题很好的解决吗?也许更好的方法是使用两个表?感谢所有的答案。
我个人使用一个表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'
您的解决方案是好的,但不好。是的,你可以看到一组同义词作为实体并存储它们。 (尽管你可以使用分隔符来开始和结束每个分组,例如'大学,学院,学校',以便能够询问'%,school,%'等词。)然而,查找单词总是会导致整个表扫描,这是不高效的。
此外,要显示“学校”的同义词,您希望显示“大学,学院”而不是“大学,学院,学校”。也许人们会想要查找“学院”的其他同义词。所以你突然处理单个单词而不是只处理同义词组。所以将这些单词作为连接字符串存储不再是可取的。
你需要的是一个单词表。你需要同义词组。
你可以用两个表,一个单词和一个用于同义词组做到这一点:
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
两种方法各有优点便于访问,维护,存储等。