2016-03-03 3 views
0

Я пытаюсь создать базу данных библиотеки, используя SQL, в которой одна book_id рекомендует использовать другой номер book_id.От многих до многих ссылок на самоопределение

В таблице я создал выглядит следующим образом:

CREATE TABLE BOOK (
    Book_id INT NOT NULL, 
    Book_name VARCHAR(40) NOT NULL, 
    Description VARCHAR (100) NOT NULL, 
    Image BLOB NOT NULL, 
    Category_id INT NOT NULL, 
    PRIMARY KEY (Book_id), 
    FOREIGN KEY (Category_id) REFERENCES Category (Category_id) 

Мне нужно создать отдельную таблицу для обеспечения выполнения этого многие ко многим себе отношения делать?

+0

[Ассоциативная организация] (https://en.wikipedia.org/wiki/Associative_entity) – Plutonix

ответ

1

Вы можете создать связанную многие-ко-многим таблицу, как это:

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.

и т. Д. - вы поняли.

+1

Автоинкрементный столбец не нужен. «ПЕРВИЧНЫЙ КЛЮЧ» может быть '(book_id1, book_id2)'. –

Смежные вопросы