有没有一种好方法来实现单表中的行之间的多对多关系?
示例:存储单词同义词的表:
-- list of words
CREATE TABLE word (
id integer PRIMARY KEY,
word varchar(32) NOT NULL UNIQUE
);
INSERT INTO words (id, word) VALUES (1, 'revolve');
INSERT INTO words (id, word) VALUES (2, 'rotate');
-- M:M link between words
CREATE TABLE word_link (
word1 integer REFERENCES word(id) NOT NULL,
word2 integer REFERENCES word(id) NOT NULL,
PRIMARY KEY (word1, word2)
);
明显的解决方案导致可能不是 1NF 表,其中包含重复数据:
INSERT INTO word_link(word1, word2) VALUES (1, 2);
INSERT INTO word_link(word1, word2) VALUES (2, 1);
虽然可以通过添加 (word1 < word2) 检查来处理重复,但它使 SELECT 更加复杂(与普通连接相比,联合)并且非常随意。这种特定情况可以从辅助表中受益(例如“含义”,因此单词是 M:N 链接到共同含义而不是相互链接,从而提供更清晰的模式),但我对一些通用解决方案感兴趣。
那么有没有更好的(希望是通用的)方法来实现这种 M:M 关系?