Вы можете создать связанную многие-ко-многим таблицу, как это:
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)
Затем Вы можете добавить столько записей, сколько вы хотите. Скажите id 1 = «Huckleberry Finn» в таблице «Книги», вы можете добавить 1 как значение Book_id1 и 2 как значение Book_id2, где книга 2 «Tom Sawyer»; затем добавить «странствия McPheeters Джейми» как еще один разъем, и т.д.
например, если они находятся в книге таблице:
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», это зависело бы от того, хотите ли вы сказать «люди, которым нравился Гек Финн, рекомендуют Том Сойер», а также говорят: «Люди, которым нравился Том Сойер, рекомендуют Huck Finn "(или следует ли рассматривать одностороннюю рекомендацию в двух направлениях без явно учитывая это).
После этого можно определить, что существует связь между книгой2 («Tom Sawyer») и книгой3 («Путешествия из Jaimie McPheeters»), хотя нет записи «2,3». Это похоже на пресловутую «Семь степеней Кевина Бэкона» - все книги с взаимной рекомендацией являются взаимными рекомендациями. ИЛИ, OTOH, вы могли бы просто ограничить ваши соединения прямыми («Гек Финн» подключается к «Тому Сойеру», но «Том Сойер» не подключается к «Джейми МакФетерс», если вы не введете запись в 2,3.
и т. Д. - вы поняли.
[Ассоциативная организация] (https://en.wikipedia.org/wiki/Associative_entity) – Plutonix