我的数据模型中有一个对象,如下所示:
// A word in the English language.
public class Word {
private Long id; // Ex: 35
private String text; // Ex: "catlike"
private Integer length; // Ex: 7
private String definition; // Ex: "resembling a cat; stealthy"
private List<Word> synonyms; // Ex: "quick", "nimble"
private List<Word> antonyms; // Ex: "sluggish", "slow"
// Getters, setters, ctors, etc. omitted for brevity; this is a simple POJO/bean
}
如您所见,它包含 2 个“递归”其他词(同义词和反义词)列表。AWord
与它的同义词和反义词都具有多对多的关系。例如:“ cat-like ”的同义词可能是“ quick ”,但“ quick ”也是“ fast ”的同义词,等等。
我的计划Word
是使用 3 个不同的表对数据库中的 s进行建模:1 个主words
表和 2 个人行横道/连接表:
words
synonyms
(人行横道)antonyms
(人行横道)
表格及其字段:
[words]
id PRIMARY KEY AUTO INCREMENT
text VARCHAR
length INTEGER
definition VARCHAR
[synonyms]
id PRIMARY KEY AUTO INCREMENT
word_1_id FOREIGN KEY (words)
word_2_id FOREIGN KEY (words)
[antonyms]
id PRIMARY KEY AUTO INCREMENT
word_1_id FOREIGN KEY (words)
word_2_id FOREIGN KEY (words)
所以我的想法是,如果我想查询描述中包含“ metal ”的任何单词,或者其中包含“ metal ”的任何同义词,我的查询可能如下所示:
SELECT
*
FROM
words w
INNER JOIN
synonyms s
ON
w.id = s.word_1_id
WHERE
w.definition LIKE '%metal%'
OR
??? (synonym of w).definition LIKE '%metal%'
我是否正确地模拟了这种递归关系?!?我觉得我要么死心塌地,要么完全脱离基地,忽视了一些明显的东西。提前致谢!