你可以创建一个类似这样的相关的多对多表:
CREATE TABLE RECOMMENDED_BOOKS (
Book_id1 INT NOT NULL, // FK related to BOOK.Book_id
Book_id2 INT NOT NULL), // FK related to BOOK.Book_id
CONSTRAINT pk_RecommendedBooks PRIMARY KEY (Book_id1, Book_id2)
你可以添加任意数量的条目。例如,在Books表中id为1的书名是“哈克贝利·费恩历险记”,你可以将1添加为Book_id1的值,将2添加为Book_id2的值,其中第二本书是“汤姆·索亚历险记”;然后再加上“詹米·麦克菲特斯的旅行”作为另一个连接器,以此类推。
例如,如果这些内容在BOOK表中:
Book_id 1, Book_name "The Adventures of Huckleberry Finn"
Book_id 2, Book_name "The Adventures of Tom Sawyer"
Book_id 3, Book_name "The Travels of Jaimie McPheeters"
Book_id 4, Book_name "Westward Ho"
Book_id 5, Book_name "Main Traveled Roads"
...你可以添加这些记录:
INSERT INTO RECOMMENDED_BOOKS (Book_id1, Book_id2) VALUES (1, 2)
INSERT INTO RECOMMENDED_BOOKS (Book_id1, Book_id2) VALUES (1, 3)
是否插入“2,1”和“3,1”记录也取决于您是否希望能够说“喜欢《哈克贝利·费恩历险记》的人推荐《汤姆·索亚历险记》”,并且也可以说,“喜欢《汤姆·索亚历险记》的人推荐《哈克贝利·费恩历险记》”(或者是否应该将单向推荐视为未明确记录的双向推荐)。
此后应该能够确定书2(“汤姆·索亚历险记”)和书3(“杰米·麦克菲特斯的旅行”)之间存在联系,即使没有“2,3”记录。这有点像谚语中的“凯文·贝肯的七度分离” - 所有具有相互推荐的图书本身都是相互推荐的。或者,您也可以将连接限制为直接连接(“哈克贝利·费恩”连接到“汤姆·索亚”,但“汤姆·索亚”不连接到“杰米·麦克菲特斯”,除非插入2,3记录。
等等 - 您肯定明白我的意思。