SQL如何保留同义词/替代词

SQL如何保留同义词/替代词,sql,ruby,Sql,Ruby,我想知道如何在数据库中保存同义词。例如: 单词school的同义词有:学院、学院 如果我填写“学校”表格,则答复应包括[学院、学院] 否则,如果我写大学,我想得到[学校,学院] 我想到了一个有一列的表,在那里我可以 college,academy,school, 然后我会用 SELECT * FROM synonyms WHERE word LIKE 'school' 这是解决这个问题的好办法吗?也许更好的方法是使用两张桌子?感谢您的所有回答。我个人会使用一个表单词,将多对多连接称为同义词。

我想知道如何在数据库中保存同义词。例如:

  • 单词school的同义词有:学院、学院
  • 如果我填写“学校”表格,则答复应包括[学院、学院] 否则,如果我写大学,我想得到[学校,学院]
  • 我想到了一个有一列的表,在那里我可以

    college,academy,school,
    
    然后我会用

    SELECT * FROM synonyms WHERE word LIKE 'school'
    

    这是解决这个问题的好办法吗?也许更好的方法是使用两张桌子?感谢您的所有回答。

    我个人会使用一个表
    单词
    ,将多对多连接称为同义词。因此,实际上它将是两个表,
    words
    带有
    id:integer,word:string
    ,第二个表是
    同义词\u words
    word\u id:integer,同义词\u 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,%”之类的单词的位置。)但是查找单词总是会导致全表扫描,这是不高效的

    此外,要显示“学校”的同义词,您需要显示“学院,学院”而不是“学院,学院,学院”。也许有人会想再查一下“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 表格文字: id |字 ---+---------------- 1 |学院 2 |学校 3 |学院 4 |鱼群 表格组: id | id|u单词 ---+---------------- 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 表格组: 组| id |字 ---------+----------------+ 1 |学院 1 |学校 1 |学院 2 |学校 2 |鱼群 这两种方法在易于访问、维护和存储等方面都有各自的优势